2013-03-07 61 views
0

我試圖在我的網站上創建一個表格,顯示最低'價值'的前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中的一行,其中包括一級和二級。所以如果有三排或更多的同一學生,那麼他或她應該被包括在內。

我是一名初學者程序員,在這一點上我阻止了,因爲我不知道如何做到這一點,並且我的研究在這一點上讓我更加困惑。感謝您的幫助。

+0

爲什麼你覺得他們應該已經grade2? ......我的意思是,這些行的分級方法不是'A'或'B'? – 2013-03-07 17:00:33

+0

您的結果難以閱讀。你可以壓縮它們來顯示'grade1','grade2'和'value'嗎? – 2013-03-07 17:03:18

+0

@KyleHale不,他們確實是A或B,那方面工作正常(但是,一旦我集成了你的INNER JOIN策略,我不得不在插入的第二次插入CASE時使用它)。不知道我是否理解你的問題,對不起。 – BillyCode 2013-03-08 15:58:38

回答

1

您的案例陳述說,如果學生的評分方法是「A」或「B」,則返回grade1即使它爲空。 因此,無論您需要:

  • 修改學生的gradedmethods不爲「A」或「B」,或
  • 改變你的case語句添加「和等級1不空」的第一個WHEN條件回落到grade2如果grade1是空

不知道什麼要求(不顯示非NULL的成績?有什麼gradedmethod做什麼呢?)所以我不能告訴你肯定如何避免你看到的。

讓學生有3個等級,增加此連接到您的查詢:

INNER JOIN (select studentid from Table5 group by studentid having count(studentid) > 3) threeGrades on threeGrades.studentid = s.studentid 
+0

謝謝你的回答,非常有幫助。我仍然遇到的唯一問題是,它不會將GRADE2作爲VALUE,直到它遇到GRADE1存在的行,如果GRADE1爲NULL,則它將GRADE2指定爲VALUE。奇怪... – BillyCode 2013-03-08 15:52:04

+0

我..不認爲這是它在做什麼。 CASE聲明中說:「這個學生的評分方法是」A「還是」B「?如果是,則輸入Grade1,否則輸入Grade2。對於第9排,那個學生的分數方法是什麼? – 2013-03-08 16:51:36