Я создал следующую хранимую процедуру для получения динамической сводной таблицы, которая может быть расширена на любое количество сотрудников в первом столбце и на любое количество курсов в первой строке
DECLARE @PivotColumnHeaders VARCHAR(MAX)
SELECT @PivotColumnHeaders =
COALESCE(
@PivotColumnHeaders + ',[' + cast(CourseName as varchar) + ']',
'[' + cast(CourseName as varchar)+ ']'
)
FROM employee, courses
DECLARE @PivotTableSQL NVARCHAR(MAX)
SET @PivotTableSQL = N'
select
*
from
(
SELECT dbo.employee.Name, dbo.employee.BadgeNo, dbo.employee.Division, dbo.employee.Organization, dbo.courses.CourseName, dbo.courses.CourseID
FROM dbo.employee LEFT OUTER JOIN
dbo.courses ON dbo.employee.CourseID = dbo.courses.CourseID
) DataTable
PIVOT
(
Count(CourseID)
FOR CourseName
IN (
'+ @PivotColumnHeaders+'
)
) PivotTable
'
EXECUTE(@PivotTableSQL)
Проблема с этой хранимой процедурой: когда я использовал инструмент студии управления SQL Server для добавления курсов и сотрудников, он выдал мне следующую ошибку:
Сообщение 8156, уровень 16, состояние 1, строка 17
Столбец «xxxxx» был указан несколько раз для «Сводная таблица».
xxxxx - это имя первого сотрудника в таблице.