2016-02-23 85 views
1

我一直在閱讀本網站以及谷歌有關如何旋轉我的數據,但似乎無法完全弄清楚。我希望能夠在不進行任何聚合的情況下進行樞軸轉動。我的數據目前看起來像。我的SQL是:如何無聚合樞軸

select act, rn 
from ##Temp_Outage_Crew 
order by act 

act   rn 
00208763-BC2 AUXO01 
00208763-BC2 AUXO03 

但我希望它看起來像下面顯示。我現在有辦法讓這些數據PIVOT,但我無法讓它工作。

act    rn1  rn2 
00208763-BC2 AUXO01  AUX03 

我有「企圖」使用行號功能,但我似乎無法得到這個工作。

+0

不合計的唯一原因是隻有價值;在這種情況下,使用該值的'max'函數將返回該值;所以雖然你會使用聚合,你會得到你想要的結果。 – JohnLBevan

+0

[TSQL Pivot without aggregate function]的可能重複(http://stackoverflow.com/questions/1343145/tsql-pivot-without-aggregate-function) –

回答

2

正如在評論中提到的那樣,您的必須PIVOT中使用聚合。 MAX適用於字符串,因此當您有1對1關係時,這是一個很好的選擇。

要獲得任意rn1rn2列,使用ROW_NUMBER()是有意義的。假設你知道值rn的最大數量可以有一個特定的act值,你可以這樣做:

;WITH toc_CTE 
    AS (SELECT [act], 
       [rn], 
       [RowNum] = CONCAT('rn', ROW_NUMBER() 
              OVER (
              PARTITION BY [act] 
              ORDER BY [rn])) 
     FROM #Temp_Outage_Crew) 
SELECT [act], 
     [rn1], 
     [rn2], 
     [rn3], 
     [rn4] 
FROM toc_CTE 
     PIVOT (MAX([rn]) 
      FOR [RowNum] IN ([rn1], 
           [rn2], 
           [rn3], 
           [rn4])) pvt 

但是,如果沒有對rn值的每act數量沒有具體的限制,那麼你將不得不使用dynamic PIVOT

+0

這樣做。我只是無法弄清楚查詢語法。我曾嘗試過多種方式但沒有運氣,但上面的語法完美無缺。非常感謝! –

+0

@Lisa歡迎來到Stack Overflow。如果此答案令人滿意地解決了您的問題,請考慮使用分數旁邊的複選標記「接受」它。這讓網站上的其他用戶知道這個問題有一個可行的解決方案。 – CactusCake