sql - SQL Server - 基于第三列值的行到列
问题描述
非常感谢你的帮助。我正在使用一个包含两列的表:EmployeeID 和 Color。我使用以下(非常简单的)代码拉出这两列:
Select
EmployeeID,
Color
From
dbo.EmployeeID E
join dbo.Color C on C.EmployeeID = E.EmployeeID
结果以下列格式返回。有数百行具有不同的employeeID、颜色组合。:
EmployeeID Color
123 Blue
123 Green
123 Yellow
234 Blue
234 Green
我想旋转数据,使结果如下所示:
EmployeeID Color1 Color2 Color3
123 Blue Green Yellow
234 Blue Green
我过去曾使用数据透视函数来聚合数据,但这次无法弄清楚。我认为不需要聚合函数会让我失望。如果我使用 MIN 或 MAX 作为 PIVOT 的函数,我不知道如何获取每个 EmployeeID 的所有颜色。
任何帮助表示赞赏,我经常遇到同样的情况,很想知道如何导航。
谢谢!
解决方案
如果您知道您想要的列数PIVOT
,您可以与ROW_NUMBER()
DECLARE @t TABLE (EmployeeID INT, Color VARCHAR(10))
INSERT @t
VALUES(123,'Blue'),
(123,'Green'),
(123,'Yellow'),
(234,'Blue'),
(234,'Green'),
(456,'Yellow'),
(456,'Blue')
;WITH c AS (
SELECT *, ROW_NUMBER() OVER(PARTITION BY EmployeeId ORDER BY Color) rn
FROM @t
)
SELECT EmployeeId, [1], [2], [3]
FROM c
PIVOT(
MAX(Color) FOR rn IN ([1], [2], [3])
) pvt