Sql 将行转换为列,并将两列合并为其值

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语句中,将行转换为列。我尝试了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 
谢谢

您可以检查这个

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

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)

太好了,这正是我需要的。非常感谢。