我有一个分数表,学生的测验分数和作业分数按以下方式输入
| 学生编号|课程ID|测验1|测验2|测验3|测验4|测验5|任务1|任务2|任务3|任务4|任务5|
| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------|
| 1个|三二一|* * 10个**| * * 八**|四个|1个|* * 九**| * * 七**|三个|* * 九**| * * 八**|五个|
| 第二章|三二一|* * 六**| * * 10个**|六个|三个|* * 八**|四个|* * 七**| 1个|* * 八**| * * 六**|
| 三个|三二一|* * 七**| * * 九**|第二章|* * 八**|四个|* * 10个**| * * 七**|五个|* * 八**|三个|
| 四个|三二一|* * 七**|第二章|* * 六**|四个|* * 八**|三个|* * 六**| * * 九**| * * 10个**|五个|
| 五个|三二一|三个|四个|* * 五**| * * 七**| * * 10个**|五个|* * 七**| * * 八**|三个|* * 九**|
现在我想选出最高的3个测验号码和最高的3个作业号码,并将它们相加,分别作为每个学生的总测验号码和总作业号码。为了更好地理解,我在上表中用粗体显示了最高号码
结果应该是这样的
| 学生编号|课程ID|测验总计|任务共计|
| - ------| - ------| - ------| - ------|
| 1个|三二一|二十七|二十四|
| 第二章|三二一|二十四|二十一|
| 三个|三二一|二十四|二十五|
| 四个|三二一|二十一|二十五|
| 五个|三二一|二十二|二十四|
我试过的是非枢轴技术,但结果不是我所期望的。以下是我所尝试的
SELECT TOP(3) StudentID, Marks
FROM
(SELECT StudentID,CourseID , Quiz1, Quiz2, Quiz3, Quiz4, Quiz5 FROM Marks) stu
UNPIVOT
(Marks FOR QuizNo IN (Quiz1, Quiz, Quiz3, Quiz4, Quiz5)) AS mrks
WHERE (CourseID = 321)
Order by Marks Desc
1条答案
按热度按时间igsr9ssn1#
一种方法是使用CROSS APPLY取消透视并对标记求和