我使用了使用动态数据透视表来为类广泛的工作表生成数据,但仍然需要获得每个孩子的总分和主题数。以下是动态数据透视查询和结果。
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
SELECT @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(Course)
FROM (SELECT DISTINCT Course FROM Courses) AS Courses
SET @DynamicPivotQuery =
'SELECT * FROM
(SELECT
[Course],
Total,studentcourses.StudentId As Id,fname,lname
From student
join StudentCourses
on student.StudentId = studentcourses.StudentId
join courses
on studentcourses.CourseId = courses.courseid )X
PIVOT(SUM(Total)
FOR Course IN (' + @ColumnName + ')) AS PVTTable'
EXEC sp_executesql @DynamicPivotQuery
我的结果如下
Id fname lname AgricSc BasicSc CART English ICT Maths PHE
1 Fatima Abdullahi 96 97 92 97 93 97 90
2 Muhammed Abubakar 89 87 92 90 95 92 86
3 Samiat Akere 96 94 94 99 96 97 97
4 Idris Yakubu 80 92 96 92 80 88 84
5 Maryam Suleiman 80 74 95 77 90 77 86
答案 0 :(得分:0)
您可以添加一个selectcolumns,如下所示:
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
Declare @SelectColumnNames as Nvarchar(max)
SELECT @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(Course)
FROM (SELECT DISTINCT Course FROM Courses) AS Courses
Select @SelectColumnNames = stuff((select Distinct '+'+QuoteName(Course) from Courses for xml path('')),1,1,'')
SET @DynamicPivotQuery =
'SELECT Id,fname,lname,' + @ColumnName + ',' + @SelectColumnNames + ' as [TotalScore] FROM
(SELECT
[Course],
Total,studentcourses.StudentId As Id,fname,lname
From student
join StudentCourses
on student.StudentId = studentcourses.StudentId
join courses
on studentcourses.CourseId = courses.courseid )X
PIVOT(SUM(Total)
FOR Course IN (' + @ColumnName + ')) AS PVTTable'
EXEC sp_executesql @DynamicPivotQuery