これはPIVOTを介して実行できます。回転する列の数がわかっている静的PIVOTを使用するか、動的PIVOTを使用できます
静的ピボット ( SQL Fiddle with Demoを参照)
SELECT *
FROM
(
select *
from t1
) x
pivot
(
min(columnc)
for columnb in ([X], [Y])
) p
動的ピボット ( SQL Fiddle with Demoを参照)
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(columnb)
from t1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT columna, ' + @cols + ' from
(
select *
from t1
) x
pivot
(
min(ColumnC)
for ColumnB in (' + @cols + ')
) p '
execute(@query)
どちらのバージョンでも同じ結果が得られます。2 つ目は、変換される列の数が不明な場合に機能します。