嵌套大小写表达式在sql查询中出错
此Oracle查询中有什么错误。我正在尝试嵌套大小写表达式,但找不到查询失败的原因嵌套大小写表达式在sql查询中出错,sql,oracle,Sql,Oracle,此Oracle查询中有什么错误。我正在尝试嵌套大小写表达式,但找不到查询失败的原因 SELECT USER_ID, ADVISER_FORENAME, ADVISER_SURNAME, AGENT_CODE, 'ABC@WIPRO.COM' AS EMAIL_ADDRESS, SUBMISSION_DATE, STATUS_CHANGED_DATE, CASE WHEN ( CASE WHEN TO_CHAR(TRUNC(status_changed_date), 'DY
SELECT USER_ID,
ADVISER_FORENAME,
ADVISER_SURNAME,
AGENT_CODE,
'ABC@WIPRO.COM' AS EMAIL_ADDRESS,
SUBMISSION_DATE,
STATUS_CHANGED_DATE,
CASE
WHEN (
CASE
WHEN TO_CHAR(TRUNC(status_changed_date), 'DY') IN ('fri','sat','sun')
THEN ((TRUNC(STATUS_CHANGED_DATE) - (TRUNC(SUBMISSION_DATE)))>4)
ELSE ((TRUNC(STATUS_CHANGED_DATE) - (TRUNC(SUBMISSION_DATE)))>6)
END)
THEN 'B'
ELSE 'A'
END AS CATEGORY_CODE,
PLAN_REF,
PRODUCT_CODE,
CASE
WHEN ((TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE))>4)
THEN 'IPP'
ELSE 'ICP'
END AS TOUCHPOINT_NAME
FROM PIPELINE_PLAN
WHERE STATUS =26
AND PRODUCT_TYPE =1
AND (TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE))<=4;
选择用户标识,
顾问(姓名),
你姓什么,
代理代码,
'ABC@WIPRO.COM'作为电子邮件地址,
提交日期:,
状态更改日期,
案例
什么时候(
案例
何时在('fri','sat','sun'中输入字符(TRUNC(状态更改日期),'DY'))
然后((TRUNC(状态更改日期)-(TRUNC(提交日期)))>4)
其他((TRUNC(状态更改日期)-(TRUNC(提交日期)))>6)
(完)
然后是“B”
其他“A”
以类别代码结尾,
计划参考号:,
产品代码,
案例
当((TRUNC(状态更改日期)-TRUNC(提交日期))>4)
然后是“IPP”
其他“国际比较项目”
以接触点名称结束
从管道计划
其中STATUS=26
和产品类型=1
和(TRUNC(STATUS\u CHANGED\u DATE)-TRUNC(SUBMISSION\u DATE))您嵌套的案例有点太聪明了。在oracle中,比较(产生3向布尔结果TRUE/FALSE/UNKNOWN
)和表达式(产生其他类型的值)是不可互换的
大小写
表达式的结果不是布尔值,因此在需要布尔值的外部大小写
中
时,它不能用作的参数
查询中的结构如下所示:
CASE
WHEN (
CASE
WHEN x IN ('1','2','3')
THEN (y>4)
ELSE (y>6)
END)
THEN 'B'
ELSE 'A'
END
需要重写为
CASE
WHEN y > (CASE WHEN x IN ('1','2','3') THEN 4 ELSE 6 END)
THEN 'B'
ELSE 'A'
END
或
我认为括号没有问题,但不能在案例的then
子句中使用布尔值作为结果。也许这个版本可以:
SELECT USER_ID, ADVISER_FORENAME, ADVISER_SURNAME, AGENT_CODE,
'ABC@WIPRO.COM' AS EMAIL_ADDRESS, SUBMISSION_DATE, STATUS_CHANGED_DATE,
(CASE WHEN (TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE) > 4 and
TO_CHAR(TRUNC(status_changed_date), 'DY') IN ('fri','sat','sun')
) or
(TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE) > 6 and
TO_CHAR(TRUNC(status_changed_date), 'DY') not IN ('fri','sat','sun')
)
THEN 'B'
ELSE 'A'
END) AS CATEGORY_CODE,
PLAN_REF, PRODUCT_CODE,
(CASE WHEN TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE) > 4
THEN 'IPP'
ELSE 'ICP'
END) AS TOUCHPOINT_NAME
FROM PIPELINE_PLAN
WHERE STATUS = 26 AND PRODUCT_TYPE = 1 AND
TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE) <= 4;
选择用户ID、顾问姓名、顾问姓氏、代理代码,
'ABC@WIPRO.COM'作为电子邮件地址、提交日期、状态更改日期,
(当(TRUNC(状态更改日期)-TRUNC(提交日期)>4和
TO_CHAR(TRUNC(status_changed_date),'DY')IN('fri','sat','sun'))
)或
(TRUNC(状态更改日期)-TRUNC(提交日期)>6和
TO_CHAR(TRUNC(status_changed_date),'DY')不在('fri','sat','sun'))
)
然后是“B”
其他“A”
结束)作为类别代码,
计划参考,产品代码,
(TRUNC(状态更改日期)-TRUNC(提交日期)>4时的情况)
然后是“IPP”
其他“国际比较项目”
结束)作为接触点名称
从管道计划
其中状态=26,产品类型=1,且
TRUNC(状态更改日期)-TRUNC(提交日期)6
永远不能为真
SELECT USER_ID, ADVISER_FORENAME, ADVISER_SURNAME, AGENT_CODE,
'ABC@WIPRO.COM' AS EMAIL_ADDRESS, SUBMISSION_DATE, STATUS_CHANGED_DATE,
(CASE WHEN (TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE) > 4 and
TO_CHAR(TRUNC(status_changed_date), 'DY') IN ('fri','sat','sun')
) or
(TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE) > 6 and
TO_CHAR(TRUNC(status_changed_date), 'DY') not IN ('fri','sat','sun')
)
THEN 'B'
ELSE 'A'
END) AS CATEGORY_CODE,
PLAN_REF, PRODUCT_CODE,
(CASE WHEN TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE) > 4
THEN 'IPP'
ELSE 'ICP'
END) AS TOUCHPOINT_NAME
FROM PIPELINE_PLAN
WHERE STATUS = 26 AND PRODUCT_TYPE = 1 AND
TRUNC(STATUS_CHANGED_DATE) - TRUNC(SUBMISSION_DATE) <= 4;