您可以通過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)
兩個版本都會給出相同的結果。第二種方法適用於未知數量的將要轉換的列。
看完「pivot」操作符的許多在線示例之後,究竟有什麼不明確之處?你已經嘗試了什麼? – fvu
請注意,儘管SQL服務器內部的旋轉功能是有用的,並且可以在某些情況下提供幫助,但如果超過10個樞軸(列),則性能會像石頭一樣下降。 – NotMe
@ChrisLively - 非常感謝這個有用的信息! – Coffee