Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套大小写表达式在sql查询中出错_Sql_Oracle - Fatal编程技术网

嵌套大小写表达式在sql查询中出错

嵌套大小写表达式在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

此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')                          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;