在 oracle 的另一个 case 语句中使用 case 语句的结果

Posted

技术标签:

【中文标题】在 oracle 的另一个 case 语句中使用 case 语句的结果【英文标题】:Use result from case statement in another case statement in oracle 【发布时间】:2020-06-05 22:11:58 【问题描述】:

我有一个视图,其中包含一列的强制转换语句。此 cast 语句包含一个 case 语句。这个说法有效。此语句的结果是 1、2 或 3。

从这里开始,我需要使用上一个 case 语句的结果(我使用了 WITH 语句,但它不起作用)来确定列的值。一个简单的 case 语句,将 yes、no 或 null 分配给上述语句的值(1、2 或 3)

感谢任何帮助。谢谢。

使用伪代码的示例:

CAST (
   WITH case_output 
   AS(
    SELECT
        CASE
            WHEN EXISTS
                    (select from table where blah blah)
                THEN 
                    (select column from that table)
            ELSE
                 (select from some another table)
        END 
       )     
  CASE
        WHEN case_output = 1
            THEN 'Yes'
        WHEN case_output = 2
            THEN 'No'
    else 
        NULL
 AS VARCHAR2 (10))
    column_name,
    .... [rest of query]

【问题讨论】:

我迷路了。 case_output 是 CTE 还是列?样本数据和期望的结果真的很有帮助。 您能否通过使用select from dual 或类似方法的工作示例重现该行为? 【参考方案1】:

您混淆了WITH 子句的查询名称和列名称。例如,它是

WITH my_query AS (SELECT c1 AS my_column FROM t1)
SELECT my_column FROM my_query;

其次,您总是需要在 Oracle 的 SQL 中使用FROM 子句。使用虚拟表DUAL 作为替身:

SELECT CASE WHEN ... THEN END AS my_column
  FROM DUAL;

最小的工作示例:

CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c2 INT);
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2);

WITH case_query AS (
   SELECT CASE WHEN EXISTS (SELECT * FROM t1 WHERE c1=100) 
               THEN (SELECT c1 FROM t1)
               ELSE (SELECT c2 FROM t2)
           END AS case_output 
     FROM dual)
SELECT CASE case_output
       WHEN 1 THEN 'Yes'
       WHEN 2 THEN 'No'
       ELSE NULL
        END second_case_output
  FROM case_query;  

【讨论】:

感谢您的帮助!!我不知道如何使用 WITH 子句,但现在更清楚了:)

以上是关于在 oracle 的另一个 case 语句中使用 case 语句的结果的主要内容,如果未能解决你的问题,请参考以下文章

Oracle:在 Where 子句中使用 Case 语句

在 oracle 中的 case 或 decode 语句中使用 sum

Oracle 在 case 语句和插入中使用引号的区别

Oracle:在操作中使用 CASE 语句变量

oracle如何在CASE WHEN ELSE语句中使用select语句?

在 where 子句中使用 case 语句的 Oracle Missing 关键字