首页 > 解决方案 > 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 的所有颜色。

任何帮助表示赞赏,我经常遇到同样的情况,很想知道如何导航。

谢谢!

标签: sqlsql-serverpivot

解决方案


如果您知道您想要的列数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

推荐阅读