当我尝试运行此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
问题是Oracle 评估
SELECT
afterWHERE
子句。您可以将查询放在子选择中:
或者,您可以复制子句
CASE
中的WHERE
语句:或者,如果您的实际情况与此一样简单,您可以
grade
输入您的WHERE
子句:您不能在 where 子句中使用列别名。您可以执行以下操作:将原始查询用作子查询。
除了 Balázs 的解决方案之外,您还可以使用 CTE(通用表表达式 - 又名 WITH 子句)做一些漂亮的事情。看看我在下面所做的,你应该能够适应它。你可以以任何你喜欢的方式使用你的 SQL 的结果。此代码适用于 PostgreSQL(没有运行的 Oracle 实例),但它应该适用于 Oracle。
现在,我从测试表中选择(我只使用了几个样本记录):