我正在尝试在子表(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:
PACOTE AS (
CASE
您可能打算:
PACOTE AS (
SELECT CASE
您正在尝试从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'