SQL Server - строки в столбце на основе значения третьего столбца - PullRequest
0 голосов
/ 24 апреля 2018

Большое спасибо за вашу помощь. Я работаю с таблицей с двумя столбцами: 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.

Любая помощь приветствуется, я постоянно сталкиваюсь с этой ситуацией и хотел бы знать, как ориентироваться.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018
with
    t as ( select   E.EmployeeID ,
                    Color
           from     E
                    join C on C.EmployeeID = E.EmployeeID
         )
select  EmployeeID ,
        Blue ,
        Green ,
        Yellow
from    t pivot ( min(Color) for Color in ( Blue, Green, Yellow ) ) pvt
0 голосов
/ 24 апреля 2018

Вы можете использовать запрос ниже для получения ожидаемого результата

select  [EmployeeID], [Blue] as  column1,[Green] as column2, [Yellow] as column2 from 
(

 Select 
   e.EmployeeID,
   Color
From 
     dbo.EmployeeID E 
join dbo.Color C on C.EmployeeID = E.EmployeeID


) a
pivot 
(
max(color)
 for color in ([Blue],[Green] , [Yellow])
) as pv;
0 голосов
/ 24 апреля 2018

Если вы знаете количество столбцов, которое вы хотите 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...