我有一个包含学生分数(StudentsID、Subject、Year、Mark)的表格。
我想水平显示同一学生、科目但不同年份的分数。
我的问题是并非所有学科都可以在所有年份开设,我的意思是学生每年可以选择不同的科目。我想在一张桌子上水平显示它们。
例子:
我试过这个查询
SELECT TOP (100) PERCENT
dbo.New_Portal_OldMarks.StudentID, dbo.New_Portal_OldMarks.[Student Name],
dbo.New_Portal_OldMarks.SubjectName, dbo.New_Portal_OldMarks.AcademicYear,
dbo.New_Portal_OldMarks.Class, dbo.New_Portal_OldMarks.Term1, dbo.New_Portal_OldMarks.Term2,
dbo.New_Portal_OldMarks.Term3, dbo.New_Portal_OldMarks.Final,
New_Portal_OldMarks_1.AcademicYear AS AcademicYear2,
New_Portal_OldMarks_1.Class AS Class2,
New_Portal_OldMarks_1.Term1 AS [Term1-2],
New_Portal_OldMarks_1.Term2 AS [Term2-2],
New_Portal_OldMarks_1.Term3 AS [Term3-2],
New_Portal_OldMarks_1.Final AS [Final-2]
FROM
dbo.New_Portal_OldMarks
FULL OUTER JOIN
dbo.New_Portal_OldMarks AS New_Portal_OldMarks_1 ON dbo.New_Portal_OldMarks.StudentID = New_Portal_OldMarks_1.StudentID
AND dbo.New_Portal_OldMarks.SubjectName = New_Portal_OldMarks_1.SubjectName
WHERE
(dbo.New_Portal_OldMarks.StudentID = 1004000)
ORDER BY
AcademicYear2
我尝试了所有连接查询(例如 JOIN、LEFT JOIN、RIGHT JOIN 等),但它们都返回错误的结果
您可以使用条件聚合:
SELECT om.ID, om.StudentID, om.[Student Name], om.SubjectName,
MAX(CASE WHEN om.class = 11 THEN academicyear END) as academicyear,
MAX(CASE WHEN om.class = 11 THEN class END) as class,
MAX(CASE WHEN om.class = 11 THEN term1 END) as term1,
MAX(CASE WHEN om.class = 11 THEN term2 END) as term2,
MAX(CASE WHEN om.class = 11 THEN term3 END) as term3,
MAX(CASE WHEN om.class = 11 THEN final END) as final,
MAX(CASE WHEN om.class = 12 THEN academicyear END) as academicyear,
MAX(CASE WHEN om.class = 12 THEN class END) as class,
MAX(CASE WHEN om.class = 12 THEN term1 END) as term1,
MAX(CASE WHEN om.class = 12 THEN term2 END) as term2,
MAX(CASE WHEN om.class = 12 THEN term3 END) as term3,
MAX(CASE WHEN om.class = 12 THEN final END) as final
FROM dbo.New_Portal_OldMarks om
GROUP BY om.ID, om.StudentID, om.[Student Name], om.SubjectName
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句