ORACLE:使用案例结果时的结果

时间:2017-03-07 16:20:30

标签: sql oracle case-when

我有一个巨大的查询,我想知道它是否在Oracle中可能  获取case-when-statement的结果并将其用于比较?我的CASE-STATEMENT在Select-Statement中声明,它看起来像这样。

SELECT........
  (CASE
     WHEN (Select 1 from DUAL) = 1 THEN 'TEST'
     ELSE 'TEST2'
  END) AS TEST;

现在我想得到这个case语句的结果并在where部分中使用它?可能吗? (讽刺这可能是一个愚蠢的问题)

2 个答案:

答案 0 :(得分:2)

如果您在内联视图或公用表表达式(又名CASE子句)中定义WITH语句,则可以通过您提供的任何别名来引用它。

例如(内联视图):

SELECT ...
FROM   ( SELECT .....
         (CASE
             WHEN (Select 1 from DUAL) = 1 THEN 'TEST'
             ELSE 'TEST2'
          END) AS TEST
         FROM...
       ) v
WHERE  v.test = 'TEST2';

作为常用的表表达式,它将是:

WITH cte AS ( SELECT........
                (CASE
                   WHEN (Select 1 from DUAL) = 1 THEN 'TEST'
                   ELSE 'TEST2'
                END) AS TEST
              FROM ... )
SELECT ...
FROM   cte
WHERE  test = 'TEST2';

答案 1 :(得分:1)

您可以在case子句中使用where语句,例如:

select * from table
where table.field = (CASE
                      WHEN (Select 1 from DUAL) = 1 THEN 'TEST'
                      ELSE 'TEST2'
                     END)

这会将case语句返回的值与表字段进行比较。