我正在尝试在我的网站上创建一个表格,显示“价值”最低的前 10 名学生。我的数据库中没有实际的“值”列,而是有两列标题为“grade1”和“grade2”。我的目标是让查询将最低 10 个结果显示为“值”,无论是在 Grade1 还是 Grade2 列中。
这是查询:
SELECT TOP 10 p.class, e.teacher, k.notes, s.grade1, s.grade2
, s.gradedmethod, k.studentid
, CASE WHEN s.gradedmethod= 'A' OR s. gradedmethod= 'B' THEN s.grade1
ELSE s.grade2 END AS value
FROM Table1 k
INNER JOIN Table2 p ON p.class = k.class
INNER JOIN Table3 d ON d.tier = p.tier
INNER JOIN Table4 e ON e.teacher = p.teacher
INNER JOIN Table5 s ON k.studentid = s.studentid
WHERE s.examdate IN
(SELECT MAX(st.examdate)
FROM Table5 st
WHERE st.studentid = s.studentid
GROUP BY st.studentid)
AND k.reportcard IS NULL AND (k.cardtype = 'X' OR k.cardtype = 'Y')
ORDER BY value ASC
这是输出示例(编辑:结果压缩为仅包括 GRADE1/GRADE2/VALUE):
Class/Teacher/Notes/Grade1/Grade2/MeasureMethod/Studentid/Value
NULL/35/NULL
NULL/82/NULL
NULL/88/NULL
NULL/87/NULL
0/100//0
19/21/19
24/13/24
27/40/27
NULL/28/28
33/23/33
正如您所看到的,出现了问题,因为值列中的前四个结果在应该是 Grade2 时显示为 NULL,但是在第 9 行它运行正常......
最后,另一个问题是,如果学生被评分 3 次或更多,我只希望查询包含结果。*注意:grade1 和grade2 实际上是同一考试的两个部分。每个学生的评分考试都是表 5 中的一行,其中包括一列 Grade1 和 Grade2。因此,如果有 3 行或更多行具有相同的学生 ID,则应包括他或她。
我是一名初学者程序员,此时我正在阻止,因为我不知道如何实现这一点,而且我的研究在这一点上只会让我更加困惑。感谢您的帮助。