有没有办法在查询中引用CASE WHEN语句而不必每次都写入整个语句?我正在用PL / SQL编写,并且需要使用一些CASE WHEN语句。
我读了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
这就是它现在的样子,但是我的情况时间足够长,以至于需要更多的代码才能查看并确保其准确性。
答案 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