Я люблю оконные функции, и поэтому я использовал простую функцию row_number (), чтобы разделить некоторые данные на основе employeeID. То, что я написал, работает, но я не могу не думать, что это можно написать с помощью PIVOT. Вот код: -
WITH [Roles] AS
(
SELECT a.EmployeeID, a.StaffRole,
ROW_NUMBER() OVER (PARTITION BY a.EmployeeID ORDER BY a.StaffRole) AS RowNum
FROM [GCHHS_Reporting].[dbo].[CathLab_Staff] a
)
SELECT a.EmployeeID, b1.StaffRole AS SR#1, b2.StaffRole AS SR#2, b3.StaffRole AS SR#3, b4.StaffRole AS SR#4, b5.StaffRole AS SR#5 FROM [GCHHS_Reporting].[dbo].[CathLab_Staff] a
INNER JOIN [Roles] b1
ON a.EmployeeID = b1.EmployeeID AND b1.RowNum = 1
LEFT JOIN [Roles] b2
ON a.EmployeeID = b2.EmployeeID AND b2.RowNum = 2
LEFT JOIN [Roles] b3
ON a.EmployeeID = b3.EmployeeID AND b3.RowNum = 3
LEFT JOIN [Roles] b4
ON a.EmployeeID = b4.EmployeeID AND b4.RowNum = 4
LEFT JOIN [Roles] b5
ON a.EmployeeID = b5.EmployeeID AND b5.RowNum = 5
Приведенный выше код отображает роль, которую каждый сотрудник занял с начала времен. Итак, мой вопрос: Есть ли PIVOT способ сделать это?
Вот образец исходных данных: -
Вот пример «оконных» данных: -
Есть идеи или как я это сделал, лучший способ?