2017-03-07 29 views
1

我一直在尋找解決此問題的相當長時間的解決方案。但是,找不到任何東西。在不透明區域包含NULL值

我有一個表如下:

Month Col_1 Col_2 Col_3 Col_4 Col_5 
--------------------------------------------- 
Jan  NULL NULL 1  1  1 

我想UNPIVOT此表序與字段名的另一個表(COL_1,col2的,等等)的加盟。

我的查詢:

select Month,Name,value from 
TableName 
    unpivot 
    (
     Value 
     for Name in (Col_1,Col_2,Col_3,Col_4,Col_5) 
    ) u 

當前結果:

這給了我不NULL值如下:

Month Name Value 
----------------------- 
Jan  Col_3 1 
Jan  Col_4 1 
Jan  Col_5 1 

預期結果:

我想將NULL包括在結果中。

Month Name Value 
----------------------- 
Jan  Col_1 NULL 
Jan  Col_2 NULL 
Jan  Col_3 1 
Jan  Col_4 1 
Jan  Col_5 1 

任何幫助,將不勝感激。

+1

願它幫助,http://stackoverflow.com/questions/1002989/sql-server-include-null-using-unpivot –

回答

0
SELECT name,value 
FROM #Table1 
CROSS APPLY (VALUES ('Col_1', Col_1), 
        ('Col_2', Col_2), 
        ('Col_3', Col_3), 
        ('Col_4', Col_4), 
        ('Col_5', Col_5)) 
      CrossApplied (name, value) 

輸出

name value 
Col_1 NULL 
Col_2 NULL 
Col_3 1 
Col_4 1 
Col_5 1 
0

查詢:

select c.column_name,value 
from INFORMATION_SCHEMA.COLUMNS c 
left join(select * from 'tablename') t1 
unpivot(value for column_name in (col_1,col_2,col_3,col_4,col_5)) t2 
on t2.column_name=c.COLUMN_NAME where c.TABLE_NAME='tablename' 

Check Snapshot

+0

我以前嘗試過這一點。不工作。我得到了同樣的結果。 – user2538559

+0

使用了這個query.it會得到相同的結果嗎?如果你創建臨時表? –

+0

這應該給我預期的結果。所以,我想這個問題與我在表格中的額外列有關。編輯該問題以添加「Month」列。 – user2538559

0

您可以使用下面的查詢作爲一個變通的情況下Col_1, Col_2, ...被guarnteed不採取一個特定的值,比如-1

select [Month], Name, NULLIF(value, -1) AS value 
from (
    select [Month], 
      coalesce(Col_1, -1) AS Col_1, 
      coalesce(Col_2, -1) AS Col_2, 
      coalesce(Col_3, -1) AS Col_3, 
      coalesce(Col_4, -1) AS Col_4, 
      coalesce(Col_5, -1) AS Col_5 
    from TableName) AS t 
unpivot 
(
    Value 
    for Name in (Col_1,Col_2,Col_3,Col_4,Col_5) 
) AS u 

Demo here