2017-03-07 148 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

相关问题