我试图在我的网站上创建一个表格,显示最低'价值'的前10名学生。在我的数据库中没有实际的“值”列,而是有两列,分别是'grade1'和'grade2'。我的目标是查询将最低的10个结果显示为“值”,而不管它是在1级还是2级列中。SQL查询结束AS值无法正常工作
下面是查询:
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 /值):
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
正如你可以看到,有些事情出错了,因为值列中的前四个结果在显示为NULL时应该是Grade2,但是在第9行中它正常运行...
最后,anoth呃问题是我只希望查询包含结果,如果学生已被评分3次或更多。 *注意:1级和2级实际上是同一考试中的两个部分。每个学生评分考试都是表5中的一行,其中包括一级和二级。所以如果有三排或更多的同一学生,那么他或她应该被包括在内。
我是一名初学者程序员,在这一点上我阻止了,因为我不知道如何做到这一点,并且我的研究在这一点上让我更加困惑。感谢您的帮助。
为什么你觉得他们应该已经grade2? ......我的意思是,这些行的分级方法不是'A'或'B'? – 2013-03-07 17:00:33
您的结果难以阅读。你可以压缩它们来显示'grade1','grade2'和'value'吗? – 2013-03-07 17:03:18
@KyleHale不,他们确实是A或B,那方面工作正常(但是,一旦我集成了你的INNER JOIN策略,我不得不在插入的第二次插入CASE时使用它)。不知道我是否理解你的问题,对不起。 – BillyCode 2013-03-08 15:58:38