2

多数のデータ(一意の参照ごとに複数の行)があり、複数の列を持つ1つの行に含める必要があります。使用する必要のある列の一部は、複数の値を保持しているため、さらに分割する必要があります。これは、ピボット解除を使用して行われました。この1つの元の列から7つの列があり、新しい7つの列に対してステータスを表示する必要があります。ただし、最小、最大、またはカウントではなく、7列のさまざまなステータスを確認する必要があるため、ピボットを使用できません。

ここに画像の説明を入力してください

4

1 に答える 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 に答える