2011-10-17 1 views
0

제가 첫번째 열의 직원의 수와 첫 번째 행의 코스의 개수로 확장 할 동적 피벗 테이블을 얻기 위해 다음 프로 시저를 생성SQLServer : 동적 피벗 테이블을 만드는이 저장 프로 시저의 오류는 무엇입니까?

 
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을 사용하는 직원이 나에게 다음과 같은 오류 준 경우 : 열 'xxxxx는이'피벗 테이블 '에 대해 여러 번 지정

메시지 8156, 수준 16, 상태 1, 줄 17 을 '.

xxxxx는 테이블의 첫 번째 직원의 이름입니다.

답변

0

첫 번째 Select 문에서 distinct 키워드를 지정해야하는 이유는 열 머리글을 작성했기 때문입니다. 직원이 같은 코스에 두 번 이상 출석했을 가능성이 있음을 짐작할 수 있습니다 (아마도 재교육)