0

我陷入了一个选择语句,将行转换为列。我尝试过使用 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 

谢谢..

4

1 回答 1

1

你可以检查这个小提琴

编辑 这将适用于以前不知道的列名

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)
于 2013-08-01T07:11:04.187 回答