如何在没有聚合的情况下进行枢转

时间:2016-02-23 18:49:22

标签: sql-server

我一直在这个网站以及Google上阅读有关如何透视我的数据,但似乎无法弄明白。我希望能够在不进行任何聚合的情况下进行转动。我的数据目前看起来像。我的sql是:

select act, rn
from ##Temp_Outage_Crew
order by act

act         rn
00208763-BC2    AUXO01
00208763-BC2    AUXO03

但是我希望它看起来像下面显示的那样。我现在有一种方法来收集这些数据,但我无法让它工作。

act             rn1        rn2
00208763-BC2    AUXO01     AUX03

我已经“尝试”使用行号功能,但我似乎也无法使用它。

1 个答案:

答案 0 :(得分:2)

如评论中所述,必须PIVOT中使用聚合。 MAX适用于字符串,因此当你有一对一的关系时,这是一个很好的选择。

要获取任意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的{​​{1}}值的数量没有具体限制,那么您必须使用dynamic PIVOT