SQL Server ではPIVOT
関数を使用でき、クエリは次のように設定されます。
select MRN, Value1, Value2
from
(
select MRN, FUData, FU
from FollowUp
) src
pivot
(
max(FUData)
for FU in (Value1, Value2)
) piv
Value1
、 などを、Value2
列にする必要があるアイテムの値のいずれかに置き換えます。
SQL Server 2008 にはFIRST()
関数がないため、別の集計関数を使用するか、 の各項目の最初のレコードを返すような方法でデータをクエリする必要がありますFU
。
CASE
これを記述する別の方法は、ステートメントで集計関数を使用することです。
select MRN,
max(case when FU = 'value1' then FUData else null end) Value1,
max(case when FU = 'value2' then FUData else null end) Value2
from FollowUp
group by MRN
上記のバージョンは、FU
列に変換する既知の値がある場合はうまく機能しますが、そうでない場合は、次のような動的 SQL を使用する必要があります。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(FU)
from FollowUp
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT MRN,' + @cols + ' from
(
select MRN, FUData, FU
from FollowUp
) x
pivot
(
max(FUData)
for FU in (' + @cols + ')
) p '
execute(@query)