oracle 如何在同一个select或where子句[duplicate]中使用命名的CASE或IF结果

rwqw0loc  于 2023-06-29  发布在  Oracle
关注(0)|答案(1)|浏览(162)

此问题已在此处有答案

invalid identifier error in oracle due to column alias(2个答案)
5天前关闭。
在我的查询中,我有一个case。我想在相同的SELECT中(重新)使用结果,因此我将其命名为AANTAL。不幸的是,这不起作用,因为它说值AANTAL不存在。我也尝试在WHERE中使用AANTAL,但这也导致了同样的问题。看起来我根本不能重用命名的“mutations”(比如IF语句等)。
当我们在给定的基础设施上工作时,我不能说我们使用的是哪个DB引擎,只能说它是Oracle数据库。当我没记错的时候,像这样的东西在另一个项目中的MySQL上工作,所以我认为它与Oracle有关。
如何在同一查询的SELECTWHERE中重用CASEIF的结果(在我们的Oracle环境中)。
查询示例:

SELECT DISTINCT KLANT
  ,CASE WHEN SPAAK > WIEL
    THEN 10
    ELSE 5
    END AS AANTAL
  ,AANTAL * 1.1 RESULT
FROM DELTA.FIETS
kognpnkq

kognpnkq1#

不能在定义SQL查询的同一级别中重用该查询的别名。这意味着你必须重复这个逻辑。一种简洁的处理方法是使用一个公共表表达式:

WITH cte AS (
    SELECT DISTINCT KLANT,
           CASE WHEN SPAAK > WIEL THEN 10 ELSE 5 END AS AANTAL
    FROM DELTA.FIETS
)

SELECT KLANT, AANTAL, AANTAL * 1.1 AS RESULT
FROM cte;

相关问题