2013-10-23 33 views
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 

data from userexams table

嘗試

回答

1

您當前查詢的編寫方式是針對Name中的每個考試返回一個min(StudentMark)。如果您想爲每次考試返回多個值,那麼你將要包括的另一列,會給你不同的行 - 我會建議使用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 
+0

謝謝@bluefeet :) – abodvdv