2017-03-07 5 views
1

私はかなりの時間この問題の解決策を探していました。しかし、何も見つけることができませんでした。ピボットにNULL値を含めます

以下のように、私はテーブルを持っている:私は、フィールド名(COL_1、Col2に、など)に別のテーブルを結合するために順序どおり、このテーブルをアンピボットしたい

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

マイクエリ:

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) 

出力回避策場合Col_1, Col_2, ...では取らないguarnteedされるあなたは、次のクエリを使用することができます

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

このクエリを使用して同じ結果が得られますか?あなたは一時的なテーブルを作成する場合??? –

+0

これは私に期待される結果を与えるはずです。だから、問題は私がテーブルにある余分な列にあると思います。質問を編集して「月」列を追加しました。 – user2538559

0

特定の値、例えば-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

関連する問題