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)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 回答