2016-04-25 36 views
-1

好日子大家,我有表:DB2不要選擇NULL豎列

Expected Date| 00:00 | 01:00 | 02:00 |03:00| 
20160428  | 11179 | [NULL]| [NULL]| [NULL] 
20160428  | 11181 | [NULL] |[NULL] |[NULL] 
20160428  | 11182 | [NULL] |[NULL] |[NULL] 
20160426  | [NULL] | [NULL] |[NULL] |11180       
20160426  | [NULL] | [NULL] |[NULL] |11189       

數據表動態。我怎樣才能選擇獲取只有數據的列(00:00和03:00),但不要選擇NULL垂直列(01:00和02:00)。

我想要什麼:

|Expected Date | 00:00 | 03:00 
|20160428  | 11179 | [NULL] 
|20160428  | 11181 | [NULL] 
|20160428  | 11182 | [NULL] 
|20160426  | [NULL] | 11180 
|20160426  | [NULL] | 11189 
+1

請編輯您的問題,並顯示您所期待的結果。 –

+0

我預期的預計日期| 00:00 | 03:00 | 20160428 | 11179 | [NULL] 20160428 | 11181 | [NULL] 20160428 | 11182 | [NULL] 20160426 | [NULL] | 11180 20160426 | [NULL] | 11189 – user3420361

回答

0
DECLARE getinfo cursor for 
SELECT c.name FROM sys.tables t JOIN sys.columns c ON t.Object_ID = c.Object_ID 
WHERE t.Name = '<table_name>' 

OPEN getinfo 

FETCH NEXT FROM getinfo into @col 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SELECT @cmd = 'IF NOT EXISTS (SELECT top 1 * FROM <table_name> WHERE [' + @col + '] IS NULL) BEGIN SELECT @tmp = ''' + @col + ','' end' 
    exec sp_executesql @cmd, N'@tmp varchar(30) out', @tmp out 
    if @tmp IS NOT NULL 
    BEGIN 
     SELECT @nonNullCol = CONCAT(@nonNullCol, @tmp) 
    END 
    SELECT @tmp = null 
    FETCH NEXT FROM getinfo into @col 
END 

CLOSE getinfo 
DEALLOCATE getinfo 
PRINT @nonNullCol 

SELECT @cmd = 'SELECT ' + LEFT(@nonNullCol, LEN(@nonNullCol)-1) + ' FROM <table_name>' 
EXEC(@cmd) 
+0

謝謝@Szeki格式化,這是我第一次發佈回答 – Keni

+0

不客氣,成功就這麼! – Szeki

+0

我很確定這個答案是SQL Server語法,在DB2中不起作用。 –