【问题标题】:Include NULL values in unpivot在 unpivot 中包含 NULL 值
【发布时间】:2017-03-07 07:51:25
【问题描述】:

很长一段时间以来,我一直在寻找解决此问题的方法。但是,找不到。

我有一张如下表:

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

我想取消透视此表,以便与字段名(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

预期结果:

我希望NULLs 包含在结果中。

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

任何帮助将不胜感激。

【问题讨论】:

标签: sql sql-server unpivot


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    查询:

    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'
    

    【讨论】:

    • 我以前试过这个。不工作。我得到了同样的结果。
    • 这应该给我预期的结果。所以,我想问题出在表中的额外列上。编辑问题以添加列Month
    【解决方案3】:

    您可以使用以下查询作为解决方法,以防 Col_1, Col_2, ... 保证不采用特定值,例如 -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

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2020-06-22
      相关资源
      最近更新 更多