SELECT其中id不在另一个表中的位置

时间:2012-07-24 17:44:23

标签: sql sql-server

基本上,我有一个表格结构,学生可以参加考试。

结构是这样的:

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将不会显示在评分表中。我正试图找到一种方法来检测它。

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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

答案 2 :(得分:0)

CASE var WHEN NULL THEN ...永远不会成功。

使用此:

当MAX(sc.percentile)为空时表示“未采取”'ELSE'123'END

或只是这个:

COALESCE(MAX(sc.percentile),'未被拍摄')