2017-09-16 56 views
0

我使用过的动态数据透视表来生成班级宽表的数据,但仍需要获取每个孩子的总分数和主题数量。以下是动态数据透视查询和结果。如何在动态生成的数据中获得总计

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

您可以添加下面多了一个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 
+0

它的工作表示感谢。同样的方法是否适用于每个孩子受试者数量的计数? –

相关问题