多数のデータ(一意の参照ごとに複数の行)があり、複数の列を持つ1つの行に含める必要があります。使用する必要のある列の一部は、複数の値を保持しているため、さらに分割する必要があります。これは、ピボット解除を使用して行われました。この1つの元の列から7つの列があり、新しい7つの列に対してステータスを表示する必要があります。ただし、最小、最大、またはカウントではなく、7列のさまざまなステータスを確認する必要があるため、ピボットを使用できません。
5446 次
1 に答える
3
このタイプのシフトはPIVOT関数で実行できます。
静的ピボット (デモの SQL Fiddle を参照):
select *
from
(
select reference, jobtypesplit, status
from t1
) x
pivot
(
min(status)
for jobtypesplit in ([DDS], [MBN], [LPN], [WEN], [LLP], [OPE], [SSE])
) p
これは動的に行うこともできます ( SQL Fiddleを参照) 。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(jobtypesplit)
FROM t1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT reference, ' + @cols + ' from
(
select reference, jobtypesplit, status
from t1
) x
pivot
(
min(status)
for jobtypesplit in (' + @cols + ')
) p '
execute(@query)
于 2012-06-13T09:24:48.633 に答える