我陷入了一个select语句,将行转换为列。我试过PIVOT,我能够转换单列。但我的要求却略有不同。我在下面解释了这个要求。
我有一个表结构如下,
我想选择如下数据,
表中的值是动态的,这对我来说不是问题。但我需要一种方法来获得以下结果。
有人可以给我一个提示吗,可能是修改下面PIVOT的方法。
select *
from
(
select TSID,AID,Count,BID
from tbl TS
WHERE TS.TPID = 1
) src
pivot
(
sum(Count)
for AID in (AID1,AID2,AID3)
) piv
谢谢..
答案 0 :(得分:1)
您可以查看此fiddle
修改强> 这适用于以前不知道的列名
DECLARE @Columns AS VARCHAR(MAX)
DECLARE @SQL AS VARCHAR(MAX)
SELECT @Columns = STUFF(( SELECT DISTINCT ',' + AID
FROM Table1
FOR
XML PATH('')
), 1, 1, '')
SET @SQL = '
;WITH MyCTE AS
(
SELECT TSID,
AID,
STUFF(( SELECT '','' + CONVERT(VARCHAR,[Count] )
FROM Table1 I Where I.TSID = O.TSID
FOR
XML PATH('''')
), 1, 1, '''') AS CountList
FROM Table1 O
GROUP BY TSID,
AID
)
SELECT *
FROM MyCTE
PIVOT
(
MAX(CountList)
FOR AID IN
(
' + @Columns + '
)
) AS PivotTable'
EXEC(@SQL)