1

学生の科目名 (英語、科学など) を列として表示し、各科目の下にそれぞれのマークを表示する必要があるという問題があります。データベースにクエリを実行し、これらの値を列ではなくデータセットの行として取得します。データベースにクエリを実行するにはどうすればよいですか?

私のクエリ結果

student name | marks  | Subectname
------------------------------------
raghuram        78         english
raghuram        34         physics
raghuram        76         chemistry

 ................              ...         ..........

レポートに必要な結果

studentname | english | Maths | physics | ......
----------------------------------------------------
raghuram        78       66        32

これが私のクエリです

SELECT
    st.FirstName + ' ' + st.LastName as StudentName,
    s.Subject_Name, se.Mark 
FROM
    dbo.FEE_STUDENT_EXAM se
INNER JOIN 
    dbo.FEE_STUDENT_GRADE sg ON sg.Student_ID=se.Student_ID
INNER JOIN 
    FEE_STUDENT st ON st.Student_ID=sg.Student_ID
INNER JOIN 
    dbo.EMP_SUBJECT s ON s.SubjectID=se.Subject_ID
WHERE
    sg.Grade_ID = @GradeId 
    AND sg.Division_ID = @DivId 
    AND se.Subject_ID IN (SELECT d.SubjectId 
                          FROM dbo.FEE_STUDENT_EXAM_SCHEDULED d 
                          INNER JOIN dbo.FEE_STUDENT_EXAM_SCHEDULEH h ON h.ExamScheduleID = d.ExamScheduleID 
                          WHERE h.Grade_Id = @GradeId AND h.Division_ID = @DivId 
                            AND YEAR(CAST(d.TestDate AS DATETIME)) = @Year
                            AND MONTH(CAST(d.TestDate AS DATETIME)) = @Month)
4

1 に答える 1

0

GROUP BYクエリに追加し、max(case...)必要なサブジェクトごとに次のようにします。

    Select st.FirstName+' '+st.LastName as
           StudentName,

          max(case when s.Subject_Name = 'english' then se.Mark else 0 end) as english,     
          max(case when s.Subject_Name = 'Maths' then se.Mark else 0 end) as Maths,
          max(case when s.Subject_Name = 'physics' then se.Mark else 0 end) as physics,
.........

     from   dbo.FEE_STUDENT_EXAM se
                   inner join dbo.FEE_STUDENT_GRADE sg on sg.Student_ID=se.Student_ID
                   inner join FEE_STUDENT st on st.Student_ID=sg.Student_ID
                   inner join dbo.EMP_SUBJECT s on s.SubjectID=se.Subject_ID
                   where sg.Grade_ID=@GradeId and sg.Division_ID=@DivId and
                   se.Subject_ID in(Select  d.SubjectId from dbo.FEE_STUDENT_EXAM_SCHEDULED d inner join 
                   dbo.FEE_STUDENT_EXAM_SCHEDULEH h on h.ExamScheduleID=d.ExamScheduleID where 
                   h.Grade_Id=@GradeId and h.Division_ID=@DivId and year(cast (d.TestDate as datetime))=@Year
                   and month(cast (d.TestDate as datetime))=@Month)

               Group by se.Student_ID
于 2012-10-18T05:48:46.740 に答える