2017-07-03 5 views
1

これは私にとっては些細な作業ですが、(おそらく)ピボット機構の理解が不足しているため、解決策を見つけるのが難しいです。関連する列のピボットテーブル

私は、サンプルデータでは、次の表があります。

id  code created_datetime sourceID 
------ ---- ------------------- -------- 
481792 DEF  2016-12-04 18:31:00 398464 
481792 JKH  2016-12-04 18:31:00 398464 
486429 ABC  2010-09-07 09:29:00 302304 
486429 DEF  2009-02-05 03:04:00 320903 
486429 GHI  2009-02-05 03:04:00 320903 
私は結果として取得したいと思いは、「コード」欄に、このコードはのために存在するかどうかを示すピボットある

イド。列 'created_datetime'私はSELECT DATEDIFF(DAY、created_datetime、CURRENT_TIMESTAMP)を現在までの日数に変換しようとしています。そして最後にsourceIDです。私は結果のためにこのようなことを念頭に置いていました(これは正しくフォーマットされていることを本当に願っています):

id  ABC ABC_sou ABC_days_active DEF DEF_sou DEF_days_active GHI GHI_sou GHI_days_active JKH JKH_sou JKH_days_active 
------ --- ------- --------------- --- ------- --------------- --- ------- --------------- --- ------- --------------- 
481792 0       1 398464 211           1 398464 211 
486429 1 302304 2491   1 320903 3070   1 320903 3070 

1行pr。 id、そうです。私はかなりあり得ることなく、これまでに試みられてきた何

は、このリンクに触発さ:PIVOT on Multiple Columns、ここで例を使用して、私はこの思い付いた:

select id, 
    [ABC], [ABC_source], [ABC_days_active], 
    [DEF], [DEF_source], [DEF_days_active], 
    [GHI], [GHI_source], [GHI_days_active], 
    [JKH], [JKH]_source], [JKH_days_active] 
from 
(
    SELECT id, 
       code, 
       source, 
       col, value 
     FROM MyTable 
    cross apply 
    (
    values 
     ([code], CASE code WHEN NULL THEN 0 ELSE 1 END), 
     ([code]+'_source', [source]), 
     ([code]+'_date', CAST(DATEDIFF(DAY,created_datetime,CURRENT_TIMESTAMP) AS varchar (20))) 
) c (col, value) 
) d 
pivot 
(
    max(value) 
    for col in ([ABC], [ABC_source], [ABC_date], [DEF], [DEF_source], [DEF_date], 
       [GHI], [GHI_source], [GHI_date], [JKH], [JKH_source], [JKH_date]) 
) piv; 
私に正しい列を与えた

(列名)が、私はまだ始まった行数と同じです。 (さらに、0はNULLとしてしか表示されませんが、私はそれと一緒に暮らすことができます)

私にそこに着くためのヒントを教えてもらえますか?それはおそらく私が正しく解釈していないものかもしれません...

+0

'ピボット。* 'を選択してください。ピボットの一部ではないが、 '_active'カラムを選択しました。 'PIVOT'で使われていない' FROM'節の全ての列は、グループ化に使用されます。また、ソーステーブルから2つの列をピボットしようとしているようです。 'PIVOT'は、集約関数によってピボットする1つの列のみをサポートします。 – Aquillo

+0

ああ!それはそれをしました - 感謝Aquillo!回答時にあなたのコメントに印をつけて、そのクレジットをあなたに与えることができますか? – kiro

+0

できません、私は答えとしてコメントを投稿しました。お役に立てて嬉しいです! – Aquillo

答えて

0

piv.*を選択してください。 _active列はピボットの一部ではありませんが、これを選択しました。 PIVOTで使用されていないFROMからの列は、グループ化に使用されます。また、ソーステーブルから2つの列をピボットしようとしているようです。 PIVOTは、集約関数によってピボットする1つの列のみをサポートしています。

関連する問題