これは私にとっては些細な作業ですが、(おそらく)ピボット機構の理解が不足しているため、解決策を見つけるのが難しいです。関連する列のピボットテーブル
私は、サンプルデータでは、次の表があります。
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としてしか表示されませんが、私はそれと一緒に暮らすことができます)
私にそこに着くためのヒントを教えてもらえますか?それはおそらく私が正しく解釈していないものかもしれません...
'ピボット。* 'を選択してください。ピボットの一部ではないが、 '_active'カラムを選択しました。 'PIVOT'で使われていない' FROM'節の全ての列は、グループ化に使用されます。また、ソーステーブルから2つの列をピボットしようとしているようです。 'PIVOT'は、集約関数によってピボットする1つの列のみをサポートします。 – Aquillo
ああ!それはそれをしました - 感謝Aquillo!回答時にあなたのコメントに印をつけて、そのクレジットをあなたに与えることができますか? – kiro
できません、私は答えとしてコメントを投稿しました。お役に立てて嬉しいです! – Aquillo