SQLServer: В чем заключается ошибка этой хранимой процедуры для создания динамической сводной таблицы? - PullRequest
0 голосов
/ 17 октября 2011

Я создал следующую хранимую процедуру для получения динамической сводной таблицы, которая может быть расширена на любое количество сотрудников в первом столбце и на любое количество курсов в первой строке

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 - это имя первого сотрудника в таблице.

1 Ответ

0 голосов
/ 17 октября 2011

Нужно ли указывать отдельное ключевое слово в вашем первом операторе Select, когда вы строите заголовки столбцов. Я предполагаю, что сотрудник сотрудник, возможно, посещал один и тот же курс дважды или более (возможно, повышение квалификации)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...