首页 > 解决方案 > ORA-00937: 一个案例内的总和在另一个案例内的总和内

问题描述

我有一个查询返回运动的总数:

SELECT 
    CASE PROD_TYPE
         WHEN 1 THEN SUM(WEIGHT)
         WHEN 2 THEN SUM(CASE MOVIMENT
                           1 THEN SUM(QUANTITY)
                           2 THEN SUM(QUANTITY * -1)
                        END)
    END AS TOTAL
FROM TABLE
GROUP BY PROD_TYPE, MOVIMENT

这个查询给了我错误 ORA-00937,如果删除最后一个总和没有给出错误但结果不是正确的:

WHEN 2 THEN CASE MOVIMENT
                1 THEN SUM(QUANTITY)
                2 THEN SUM(QUANTITY * -1)
            END

edit1:
我有以下数据
PROD_TYPE | 数量 | 重量 | 运动

--------2------------1100-------------0-------------1 ---
--------2------------1000-------------0----------- --1---
--------2------------1200----------------0-------- -----1---
--------2------------1200-------------0----- --------2---
*1 是输入,2 输出正确的结果是 2100,但是如果我删除最后一个总和,它将给出两个结果:3300 和 -1200
我试图将 QUANTITY 放在group by 子句,但我一直收到同样的错误。

标签: sqloracle

解决方案


我想你想要:

SELECT (CASE PROD_TYPE
         WHEN 1 THEN SUM(WEIGHT)
         WHEN 2 THEN SUM(CASE MOVIMENT
                           WHEN 1 THEN QUANTITY
                           WHEN 2 THEN - QUANTITY
                         END)
        END) AS TOTAL
FROM TABLE
GROUP BY PROD_TYPE, MOVIMENT;

推荐阅读