как выбрать данные с помощью сводной таблицы - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть данные оценок учащихся в двух таблицах, мне нужно отобразить эти данные в сводной таблице оценок. ожидаемый результат следующим образом

enter image description here

 select * from StudentProgressReports

этот результат таблицы это

enter image description here

select * from SchoolSubjects where SchoolClassID=181 and SchoolSectionID=227 and IsDeleted=0 and Status=1

результат запроса следующий

enter image description here

Я пытался следующим образом

сначала я написал один запрос на соединение, т. Е.

select spr.StudentID,ss.FirstName,ss.LastName,spr.SchoolSubID,sb.SubjectName,spr.Marks,spr.TotalMarks,spr.Grades from StudentProgressReports spr with(nolock)
left outer join SchoolStudents ss with(nolock) on spr.StudentID=ss.StudentId
left outer join SchoolSubjects sb with(nolock) on spr.SchoolSubID=sb.SchoolSubID
where spr.IsDeleted=0 
and spr.ACID is not null 
and spr.ExamID=42
and sb.SchoolClassID=181 
and sb.SchoolSectionID=227 
and sb.IsDeleted=0 
and sb.Status=1
go

результат таков

enter image description here

после этого попробовал с сводной таблицей

DECLARE @columns AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);


SET @columns = STUFF((SELECT distinct ',' + ISNULL(QUOTENAME(sub.subjectname),'NA') 
            FROM SchoolSubjects sub where len(sub.subjectname)>0 and SchoolClassID=181 and SchoolSectionID=227  
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
print @columns
set @query = 'SELECT FirstName,LastName,' + @columns + ',Marks,TotalMarks,Grades from 
            (
                select spr.StudentID,ss.FirstName,ss.LastName,spr.SchoolSubID,sb.SubjectName,spr.Marks,spr.TotalMarks,spr.Marks as m1,spr.Grades from StudentProgressReports spr with(nolock)
                left outer join SchoolStudents ss with(nolock) on spr.StudentID=ss.StudentId
                left outer join SchoolSubjects sb with(nolock) on spr.SchoolSubID=sb.SchoolSubID
                where spr.IsDeleted=0 
                and spr.ACID is not null 
                and spr.ExamID=42
                and sb.SchoolClassID=181 
                and sb.SchoolSectionID=227 
                and sb.IsDeleted=0 
                and sb.Status=1

           ) Tab1
            pivot 
            (
             sum(m1) FOR SubjectName IN  (' + @columns + ')
            ) AS Tab2 '

PRINT @query;
EXEC sp_executesql @query;

результат такой enter image description here

но мой ожидаемый результат enter image description here

Не могли бы вы помочь мне сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...