我試圖在我的網站上創建一個表格,顯示最低'價值'的前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