我有这组数据:
cId item value
-------------------------------------
1 A string1
2 A string2
3 A string3
1 B string4
2 B string5
1 C string6
3 C string7
我会将item
个广告cId
行转换为列,以获得此结果:
cId A B C
----------------------------------------------
1 string1 string4 string6
2 string2 string5 NULL
3 string3 NULL string7
item
和cId
行没有修复,所以我想我需要一些动态的sql来进行旋转。
我怎么能在tsql中做?
感谢
答案 0 :(得分:1)
以下将会这样做:
DECLARE @pivotFields varchar(255) =
STUFF(
(
SELECT ', [' + item + ']'
FROM
(
SELECT DISTINCT item
FROM YourTable
) Q
ORDER BY item
FOR XML PATH ('')
)
, 1, 2, ''
)
DECLARE @sql varchar(1000) =
'
SELECT cId, ' + @pivotFields + '
FROM
(
SELECT
cId
, item
, value
FROM YourTable
) Q
PIVOT
(
MAX(value)
FOR item IN (' + @pivotFields + ')
) P
'
EXEC (@sql)