子表[Oracle SQL]中的WHEN / THEN子句

问题描述 投票:-1回答:2

我正在尝试在子表(PACOTE)中执行WHEN / THEN子句,因为它对我的API逻辑很重要,但是我一直收到错误消息:

00907. 00000 -  "missing right parenthesis"

这是我的子表SQL查询的简历:

WITH PACOTE AS (  
  SELECT * FROM (  
    SELECT 
    CASE 
      WHEN (OE.CUST_STAT_CD = 'Prospect') THEN (

        TB1.COLUMNONE,
        TB2.COLUMNTWO
        FROM    
          TABLEONE TB1, 
          TABLEONE TB2    

      ) ELSE (

        L.COLUMNONE,
        I.COLUMNTWO
        FROM    
          TABLELOREM L, 
          TABLEIPSUM I  

      )
    END
  )
) SELECT * FROM ........... -- rest of the query --
sql oracle
2个回答
1
投票

这是无效的SQL:

PACOTE AS (  
 CASE

您可能打算:

PACOTE AS (  
 SELECT CASE

0
投票

您正在尝试从CASE表达式主体中更改查询中访问的字段和表。我已将您的代码重新格式化以使其更加清楚:

PACOTE AS (SELECT *
             FROM (SELECT CASE 
                            WHEN OE.CUST_STAT_CD = 'Prospect'
                              THEN (TB1.COLUMNONE, TB2.COLUMNTWO
                                    FROM TABLEONE TB1, 
                                         TABLEONE TB2)
                            ELSE (L.COLUMNONE, I.COLUMNTWO
                                  FROM TABLELOREM L, 
                                       TABLEIPSUM I)
                          END
                   )
          )

对不起,但这在SQL中是完全不允许的。另外,您还有一个表别名OE,该别名在CASE表达式中使用,但未在其他地方定义,因此很难为您提供建议。但是,通常,您需要使用UNION,类似于

SELECT tb1.COLUMN1, tb2.COLUMN2
  FROM TABLEONE tb1,
       TABLETWO tb2
  WHERE oe.CUST_STAT_CD = 'Prospect'
UNION ALL
SELECT l.COLUMNONE, i.COLUMNTWO
  FROM TABLELOREM l,
       TABLEIPSUM i
  WHERE oe.CUST_STAT_CODE <> 'Prospect'
© www.soinside.com 2019 - 2024. All rights reserved.