【发布时间】:2017-03-07 16:20:30
【问题描述】:
我有一个很大的查询,我想知道它是否可以在 Oracle 中使用 获取 case-when-statement 的结果并将其用于比较?我的 CASE-STATEMENT 在 Select-Statement 中声明,看起来像这样。
SELECT........
(CASE
WHEN (Select 1 from DUAL) = 1 THEN 'TEST'
ELSE 'TEST2'
END) AS TEST;
现在我想得到这个 case-statement 的结果并在 where 部分使用它?是否可以? (对不起,这可能是一个愚蠢的问题)
【问题讨论】:
-
您在问题中提出的确切方式是不可能的。如果您在
SELECT子句中定义您标记(别名)为TEST的表达式,则名称TEST在同一SELECT查询的WHERE子句中不可见,因为处理了WHERE在SELECT之前。如果不想在WHERE子句中重复相同的(可能很长)CASE表达式,最好在子查询中定义TEST,然后在WHERE子句中选择并使用它外部查询。 (您可以使用WITH子句来做到这一点。)对于未来的代码维护也更好。