Вы можете выполнить это через PIVOT. Вы можете использовать любой статический PIVOT, где вы знаете, количество колонок, которые вы хотите повернуть или вы можете использовать динамический PIVOT
Static Pivot (см SQL Fiddle with Demo)
SELECT *
FROM
(
select *
from t1
) x
pivot
(
min(columnc)
for columnb in ([X], [Y])
) p
Dynamic Pivot (см 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)
Обе версии дадут те же результаты. Второй работает, когда у вас есть неизвестное количество столбцов, которые будут преобразованы.
Что именно неясно после прочтения многих онлайн-примеров оператора 'pivot'? Что вы уже пробовали? – fvu
Обратите внимание, что хотя поворот внутри SQL-сервера является функциональным и может помочь в определенных ситуациях, если вы превысите около 10 опорных точек (столбцов), тогда производительность упадет, как скала. – NotMe
@ChrisLively - Большое спасибо за эту полезную информацию! – Coffee