非常确定这是一个非常简单的问题:
我需要为学生创建一个考试成绩表,但是需要满足以下条件:如果学生被授予70%或更高的成绩,那么结果将被显示为' Distinction&#39 ;,至少50%但不到70%的等级将被显示为' Pass'低于50%的成绩将显示为“失败”。如果学生没有参加考试,那么结果将显示为“未参加”。
我的代码出现问题似乎无法解决问题:
CREATE VIEW results_table
AS SELECT entry.excode, sname, student.sno, entry.egrade, result AS entry
FROM student
JOIN entry
ON student.sno = entry.sno
GROUP BY entry.excode, sname, student.sno, entry.egrade, result
SELECT result
CASE result
WHEN entry.egrade >= 70 THEN 'Distinction'
WHEN entry.egrade >= 50 THEN 'Pass'
WHEN entry.egrade < 50 THEN 'Fail'
WHEN entry.egrade = NULL THEN 'Not Taken'
END;
ORDER BY entry.excode,sname
有人可以告诉我哪里出错了?
答案 0 :(得分:0)
有两种类型的SQL CASE
语句,as documented for PostgreSQL here:
CASE WHEN condition THEN result ELSE default END
CASE expression WHEN value THEN result ELSE default END
第一个表单测试一系列(不相关的)条件,并返回第一个为true的结果,如果没有则为ELSE
。第二种形式是针对单个值测试多个条件的简称; CASE x WHEN y THEN 'y' WHEN z THEN 'z' END
是CASE WHEN x = y THEN 'y' WHEN x = z THEN 'z' END
的缩写。
在你的代码中,你混淆了这两种语法;你不能使用简写因为你在条件中做了比=
更复杂的事情,所以你需要省略result
这个词:
CASE
WHEN entry.egrade >= 70 THEN 'Distinction'
WHEN entry.egrade >= 50 THEN 'Pass'
WHEN entry.egrade < 50 THEN 'Fail'
WHEN entry.egrade IS NULL THEN 'Not Taken'
END
(注意:我也将= NULL
更改为IS NULL
,因为没有任何值&#34;等于&#34; {{1} },因为它意味着&#34;我们不知道价值等于&#34;。)
然后,您需要将其放入NULL
查询中,并选择正常列。
从这个简单的查询开始...
SELECT
...你可以像这样把SELECT
entry.egrade as result
FROM
entry;
语句写成:
CASE