如何在SELECT查询中引用变量字段?

时间:2014-12-15 17:10:02

标签: oracle plsqldeveloper

有没有办法在查询中引用CASE WHEN语句而不必每次都写入整个语句?我正在用PL / SQL编写,并且需要使用一些CASE WHEN语句。

  1. 某些SELECT CASE WHEN语句和其他计算字段取决于CASE WHEN语句
  2. 我的WHERE子句中有CASE WHEN语句
  3. 我的ORDER BY子句中有CASE WHEN语句
  4. 我读了this explanation on aliases,这是有道理的。但有没有比在代码行上复制/粘贴行更好的方法,让我自己感到困惑?

    SELECT
    field1
    ,field2
    ,CASE WHEN a then b when c then d else more_stuff END AS total_days
    ,CASE WHEN a + 2 then b when c + 2 then d else even_more_stuff END AS total_ad_days
    
    FROM
    table1
    JOIN table2
    
    WHERE
    CASE WHEN a + 2 then b when c + 2 then d else even_more_stuff END BETWEEN TRUNC(SYSDATE) and TRUNC(SYSDATE) + 7
    

    这就是它现在的样子,但是我的情况时间足够长,以至于需要更多的代码才能查看并确保其准确性。

1 个答案:

答案 0 :(得分:0)

您不能在定义的同一查询中使用别名。要解决该常见问题,可以使用CTE的子查询。后者对我有利:

with V as (
    SELECT
      field1
      ,field2
      ,CASE WHEN a then b when c then d else more_stuff END AS total_days
      ,CASE WHEN a + 2 then b when c + 2 then d else even_more_stuff END AS total_ad_days

    FROM
    table1
    JOIN table2
    ON ...
)

SELECT * FROM V 
WHERE total_ad_days BETWEEN TRUNC(SYSDATE) and TRUNC(SYSDATE) + 7