1

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

结构是这样的:

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

4

3 回答 3

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'
于 2012-07-24T17:59:05.637 回答
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
于 2012-07-24T17:59:42.053 回答
0

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

用这个:

CASE WHEN MAX(sc.percentile) IS NULL THEN 'not take' ELSE '123' END

或者只是这个:

COALESCE(MAX(sc.percentile), '未采取')

于 2012-07-24T18:07:22.580 回答