2012-07-24 102 views
1

基本上,我有一個表格結構,學生可以參加考試。選擇其中一個ID不在另一個表中

結構是這樣的:

http://www.dropmocks.com/mBj9YX

SELECT s.name AS studentName, 
t.name AS testName, 
MAX(sc.percentile) 
AS percentile, 
    (CASE WHEN MAX(sc.percentile) > 70 THEN 'passed' 
    WHEN MAX(sc.percentile) <70 THEN 'fail' 
    WHEN MAX(sc.percentile) IS NULL THEN 'not taken' END) AS status 
FROM Score sc 

並不想得到我想要的部分是在這裏:

WHEN MAX(sc.percentile) IS NULL THEN 'not taken' END 

如果學生不參加考試時,測試ID將不在分數表中。如果他們沒有參加測試,我無法弄清楚會在狀態欄中添加「未採用」的查詢。幫幫我?前兩項工作,但如果測試表中存在測試ID並且學生未參加該測試,則該學生的測試ID將不會顯示在評分表中。我試圖找到一種方法來檢測。

+0

你真的想要什麼? – evilone 2012-07-24 17:46:54

+0

一種檢測學生未採取的測試的方法。 – user1319343 2012-07-24 17:48:42

+3

然後你不直接從表中選擇分數。相反,做一些類似於從學生S加入測試T ...左加入SCORE SC ... WHERE SC.PrimaryKey IS NULL(或者,在您的CASE語句中放置SC.PrimaryKey IS NULL – Set 2012-07-24 17:52:56

回答

0

也許您正在使用IS_MEMBER NULL而不是IS NULL? IS_MEMBER函數與您嘗試實現的內容無關(檢查某個角色組中是否有人)。這有時會發生,因爲當你按空格鍵入查詢時,mssms添加了IS_MEMBER。它發生在我身上。嘗試改變

WHEN MAX(sc.percentile) IS_MEMBER NULL THEN 'not taken' 

WHEN MAX(sc.percentile) IS NULL THEN 'not taken' 
+0

對不起,這是一個錯字,我的意思是第二個反正。 – user1319343 2012-07-24 18:02:30

0

我從來沒有測試,但嘗試這樣

SELECT 
    sc.name AS studentName, 
    t.name AS testName, 
    MAX(sc.percentile) AS percentile, 
    (CASE 
     WHEN MAX(sc.percentile) > 70 THEN 'passed' 
     WHEN MAX(sc.percentile) < 70 THEN 'fail' 
     WHEN sc.testID IS NULL THEN 'not taken' 
     -- /*OR...*/ WHEN MAX(sc.percentile) IS NULL THEN 'not taken' 
    END) AS status 
FROM Score sc 
FULL OUTER JOIN Test t ON t.testID = sc.testID 
+0

這個工作,需要多測試一下 – user1319343 2012-07-24 18:06:15

+0

不完全正常工作。有三個學生在桌子上,它不會做我做過的事情。 – user1319343 2012-07-24 18:18:58

+0

請給我發送創建腳本和表格的插入腳本。 – FabianoLothor 2012-07-24 20:18:24

0

CASE變種時的空THEN ...永遠不會成功。

使用此:

CASE WHEN MAX(sc.percentile)爲null,則 '不採取' ELSE '123' END

或者只是這樣的:

COALESCE(MAX(sc.percentile ),'未服用')

相關問題