当我尝试运行此SELECT
声明,我得到这个错误:ORA-00904: "GPASCORE": invalid identifier
。如何gpaScore
CASE
在WHERE
子句中使用语句的结果?
SELECT
(CASE grade
WHEN 'A+'
THEN 4
WHEN 'A'
THEN 4
WHEN 'A-'
THEN 3.7
WHEN 'B+'
THEN 3.3
WHEN 'B'
THEN 3
WHEN 'B-'
THEN 2.7
WHEN 'C+'
THEN 2.3
WHEN 'C'
THEN 2
WHEN 'C-'
THEN 1.7
WHEN 'D+'
THEN 1.3
WHEN 'D'
THEN 1
WHEN 'D-'
THEN 0.7
WHEN 'F'
THEN 0
ELSE NULL END) gpaScore
FROM PGFINALGRADES
WHERE gpaScore = 3
Run Code Online (Sandbox Code Playgroud)
您可以将查询放在子选择中:
SELECT gpaScore
FROM (SELECT ( CASE grade
WHEN 'A+' THEN 4
WHEN 'A' THEN 4
WHEN 'A-' THEN 3.7
WHEN 'B+' THEN 3.3
WHEN 'B' THEN 3
WHEN 'B-' THEN 2.7
WHEN 'C+' THEN 2.3
WHEN 'C' THEN 2
WHEN 'C-' THEN 1.7
WHEN 'D+' THEN 1.3
WHEN 'D' THEN 1
WHEN 'D-' THEN 0.7
WHEN 'F' THEN 0
ELSE NULL
END ) gpaScore
FROM PGFINALGRADES) b
WHERE gpaScore = '3';
Run Code Online (Sandbox Code Playgroud)
或者,您可以复制子句CASE
中的WHERE
语句:
SELECT ( CASE grade
WHEN 'A+' THEN 4
WHEN 'A' THEN 4
WHEN 'A-' THEN 3.7
WHEN 'B+' THEN 3.3
WHEN 'B' THEN 3
WHEN 'B-' THEN 2.7
WHEN 'C+' THEN 2.3
WHEN 'C' THEN 2
WHEN 'C-' THEN 1.7
WHEN 'D+' THEN 1.3
WHEN 'D' THEN 1
WHEN 'D-' THEN 0.7
WHEN 'F' THEN 0
ELSE NULL
END ) gpaScore
FROM PGFINALGRADES
WHERE ( CASE grade
WHEN 'A+' THEN 4
WHEN 'A' THEN 4
WHEN 'A-' THEN 3.7
WHEN 'B+' THEN 3.3
WHEN 'B' THEN 3
WHEN 'B-' THEN 2.7
WHEN 'C+' THEN 2.3
WHEN 'C' THEN 2
WHEN 'C-' THEN 1.7
WHEN 'D+' THEN 1.3
WHEN 'D' THEN 1
WHEN 'D-' THEN 0.7
WHEN 'F' THEN 0
ELSE NULL
END ) = '3';
Run Code Online (Sandbox Code Playgroud)
或者,如果你的真实案例就这么简单,你可以grade
加入你的WHERE
条款:
SELECT ( CASE grade
WHEN 'A+' THEN 4
WHEN 'A' THEN 4
WHEN 'A-' THEN 3.7
WHEN 'B+' THEN 3.3
WHEN 'B' THEN 3
WHEN 'B-' THEN 2.7
WHEN 'C+' THEN 2.3
WHEN 'C' THEN 2
WHEN 'C-' THEN 1.7
WHEN 'D+' THEN 1.3
WHEN 'D' THEN 1
WHEN 'D-' THEN 0.7
WHEN 'F' THEN 0
ELSE NULL
END ) gpaScore
FROM PGFINALGRADES
WHERE grade = 'B'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6220 次 |
最近记录: |