如何获得动态生成的数据总数

时间:2017-09-16 17:12:23

标签: sql-server

我使用了使用动态数据透视表来为类广泛的工作表生成数据,但仍然需要获得每个孩子的总分和主题数。以下是动态数据透视查询和结果。

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

1 个答案:

答案 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