2013-08-01 152 views
0

我一直堅持select語句,將行轉換爲列。我已經嘗試過PIVOT,我能夠轉換單列。但我的要求是有點不同。我已經解釋了下面的要求。將行轉換爲列並將兩列合併爲其值

我有如下的表結構,

enter image description here

我想選擇如下數據,

enter image description here

在表中的值是動態的,這是不這是我面臨的一個問題。但我需要一種方法來獲得以下結果。

有人請給我一個暗示做這件事,可能是一種方法來修改下面的樞軸。

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

您可以檢查此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) 
+0

完美的作品,thsi正是我需要。謝謝 – Naveen