我一直在这个网站以及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
我已经“尝试”使用行号功能,但我似乎也无法使用它。
答案 0 :(得分:2)
如评论中所述,必须在PIVOT
中使用聚合。 MAX
适用于字符串,因此当你有一对一的关系时,这是一个很好的选择。
要获取任意rn1
和rn2
列,使用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。