Tsql 将行转置为列,按列分组
Posted
技术标签:
【中文标题】Tsql 将行转置为列,按列分组【英文标题】:Tsql transpose rows to columns, grouping by a column 【发布时间】:2017-12-07 15:46:40 【问题描述】:我有这组数据:
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 中做?
谢谢
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于Tsql 将行转置为列,按列分组的主要内容,如果未能解决你的问题,请参考以下文章