将行转换为列并合并两列作为其值

时间:2013-08-01 06:58:23

标签: sql sql-server-2008 tsql pivot

我陷入了一个select语句,将行转换为列。我试过PIVOT,我能够转换单列。但我的要求却略有不同。我在下面解释了这个要求。

我有一个表结构如下,

enter image description here

我想选择如下数据,

enter image description here

表中的值是动态的,这对我来说不是问题。但我需要一种方法来获得以下结果。

有人可以给我一个提示吗,可能是修改下面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 

谢谢..

1 个答案:

答案 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)