我创建了以下存储过程来获取动态数据透视表,该表可以在第一列中的任意数量的员工和第一行中的任意数量的课程中展开
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 management studio工具添加课程和员工时,它给了我以下错误:
Msg 8156,Level 16,State 1,Line 17 “数据透视表”已多次指定“xxxxx”列。
xxxxx是表中第一个员工的名称。
答案 0 :(得分:0)
在构建列标题时,是否需要在第一个Select语句中指定distinct关键字?我猜测一名员工的员工可能会参加同一门课程两次或更多次(或许是复习)