基本上,我有一个表格结构,学生可以参加考试。
结构是这样的:
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 :(得分: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),'未被拍摄')