Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 如何对嵌套case语句求和_Sql_Oracle11g - Fatal编程技术网

Sql 如何对嵌套case语句求和

Sql 如何对嵌套case语句求和,sql,oracle11g,Sql,Oracle11g,我试图创建一个查询,统计客户添加和修改的扣减额,以及内部支持代表的扣减额。我得到错误ORA-00905缺少关键字,就在查询的第一个结尾之后。我不知道如何对嵌套的case语句求和 SELECT sum(CASE WHEN ded.ACTION = 'A' --added deduction THEN CASE WHEN REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END) END AS "Added

我试图创建一个查询,统计客户添加和修改的扣减额,以及内部支持代表的扣减额。我得到错误ORA-00905缺少关键字,就在查询的第一个结尾之后。我不知道如何对嵌套的case语句求和

SELECT 
sum(CASE WHEN ded.ACTION = 'A' --added deduction
        THEN
        CASE WHEN REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END) 
END AS "Added By Clients", -- count # of client deductions    

sum(CASE WHEN ded.ACTION = 'A' -- added deduction
    THEN
    CASE WHEN NOT REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END)
END AS "Added by Internal Reps" -- count # of internal rep deductions    

sum(CASE WHEN ded.ACTION <> 'A' --modified deduction
        THEN
        CASE WHEN REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END) 
END AS "Modified By Clients", -- count # of client deductions    

sum(CASE WHEN ded.ACTION <> 'A' -- modified deduction
    THEN
    CASE WHEN NOT REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END)
END AS "Modified by Internal Reps" -- count # of internal rep deductions 

FROM DEDUCTIONS_TBL DED 
谢谢你的帮助

首先为什么要嵌套CASE语句?不应该是这样吗

sum(CASE WHEN ded.ACTION = 'A'
        AND REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END)
等等

你得到了一个错误,因为你有两个案例。。。案例但在总和中只有一端。除此之外还有一个目的,但实际上这只是一个错误的括号组:

(CASE ...) END

@Jnevill的帖子帮我修复了它。在声明别名之前,我删除了第一个结尾之后的括号,并将其放在第二个结尾之后

SELECT 
sum(CASE WHEN ded.ACTION = 'A' --added deduction
        THEN
        CASE WHEN REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END 
END) AS "Added By Clients", -- count # of client deductions

sum(CASE WHEN ded.ACTION = 'A' --added deduction
        THEN
        CASE WHEN NOT REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END 
END) AS "Added by Internal Reps", -- count # of client deductions

sum(CASE WHEN ded.ACTION <> 'A' --modified deduction
        THEN
        CASE WHEN REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END 
END) AS "Modified By Clients", -- count # of client deductions    

sum(CASE WHEN ded.ACTION <> 'A' -- modified deduction
    THEN
    CASE WHEN NOT REGEXP_LIKE(ded.oper_ID, '[[:digit:]]') THEN 1 ELSE 0 END
END) AS "Modified by Internal Reps" -- count # of internal rep deductions 

您的语法如下所示:SUMCASE。。。结束为别名结束结束时,右括号将您的CASE语句切碎。在SUM.case表达式中插入最后一个结尾…@jnevil找到了。谢谢可能嵌套的case不是我需要的。ded.action可以是'A'或'M'或'D'。A=已添加。D或M=根据情况进行修改。ded.oper_ID=添加、修改或删除的用户。这可以是内部代表或客户,具体取决于:digit:因此,我正在尝试计算内部代表和客户添加或修改了多少扣减额。@CraigB我不确定该评论与我的答案有何关联。我建议的代码不起作用吗?