ピボット関数を使用して、列の行の値を個別の列に変換しようとしています。その列には 100 以上の個別の値があり、ピボット関数の「for」句にすべての値をハードコーディングすると、非常に時間がかかり、保守性の目的からも良くありません。この問題に取り組むためのより簡単な方法があるかどうか疑問に思っていましたか?
ありがとう
ピボット関数を使用して、列の行の値を個別の列に変換しようとしています。その列には 100 以上の個別の値があり、ピボット関数の「for」句にすべての値をハードコーディングすると、非常に時間がかかり、保守性の目的からも良くありません。この問題に取り組むためのより簡単な方法があるかどうか疑問に思っていましたか?
ありがとう
PIVOT
このタイプのクエリでは、で動的SQLを使用できます。動的SQLは、実行時に変換するアイテムのリストを取得します。これにより、各アイテムをハードコーディングする必要がなくなります。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.condition_id)
FROM t c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT memid, ' + @cols + ' from
(
select MemId, Condition_id, condition_result
from t
) x
pivot
(
sum(condition_result)
for condition_id in (' + @cols + ')
) p '
execute(@query)
SQL FiddlewithDemoを参照してください
変換する必要のあるデータのサンプルを投稿すると、クエリを調整してデモンストレーションを行うことができます。