Sql 将行转换为列,并将两列合并为其值
我陷入了select语句中,将行转换为列。我尝试了PIVOT,我能够转换单个列。但我的要求没有什么不同。我已经在下面解释了要求 我有一个如下表结构 我想选择以下数据 表中的值是动态的,这对我来说不是问题。但是我需要一种方法来得到下面的结果 有人可以给我一个提示做这件事,可能是一种方式来修改下面的轴心Sql 将行转换为列,并将两列合并为其值,sql,sql-server-2008,tsql,pivot,Sql,Sql Server 2008,Tsql,Pivot,我陷入了select语句中,将行转换为列。我尝试了PIVOT,我能够转换单个列。但我的要求没有什么不同。我已经在下面解释了要求 我有一个如下表结构 我想选择以下数据 表中的值是动态的,这对我来说不是问题。但是我需要一种方法来得到下面的结果 有人可以给我一个提示做这件事,可能是一种方式来修改下面的轴心 select * from ( select TSID,AID,Count,BID from tbl TS WHERE TS.TPID = 1 ) s
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
谢谢 您可以检查这个
编辑
这将适用于以前未知的列名
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)
太好了,这正是我需要的。非常感谢。