0

以下に示すUserExamsテーブルがあり、次のように表示する必要がありますFirstName, First, Second, Final

PIVOT を使用してみましたが、集計関数がすべての StudentMarks を返すわけではありません

select *
from
(
SELECT     Users.FirstName,
           ExamsNames.Name,
           UserExams.StudentMark
FROM         Exams INNER JOIN ExamsNames ON Exams.ExamNameID = ExamsNames.ExamsNamesID 
                   INNER JOIN UserExams ON Exams.ExamID = UserExams.ExamID 
                   INNER JOIN Users ON UserExams.UserID = Users.UserID 
)t
PIVOT
(
min(StudentMark)
for  Name in ([First],[Second],[Final])
)p  

userexams テーブルからのデータ

4

1 に答える 1

1

現在のクエリの書き方では、 のmin(StudentMark)試験ごとに1 つを返しますName。各試験で複数の値を返したい場合は、別の列を含めて、個別の行を提供することをお勧めします-次を使用することをお勧めしrow_numberます:

select FirstName, [First],[Second],[Final]
from
(
  SELECT Users.FirstName,
    ExamsNames.Name,
    UserExams.StudentMark,
    row_number() over(partition by Users.FirstName, ExamsNames.Name
                      order by UserExams.StudentMark) seq
  FROM Exams 
  INNER JOIN ExamsNames ON Exams.ExamNameID = ExamsNames.ExamsNamesID 
  INNER JOIN UserExams ON Exams.ExamID = UserExams.ExamID 
  INNER JOIN Users ON UserExams.UserID = Users.UserID 
)t
PIVOT
(
  min(StudentMark)
  for  Name in ([First],[Second],[Final])
)p  
于 2013-10-23T15:13:08.467 に答える