You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何按客户、零件号分别汇总正负值的发货数量

需求实现解决方案

错误原因分析

  • 原SQL的CASE判断逻辑写在SUM聚合函数外部,引用了未加入GROUP BY子句的Ship_Quantity字段,数据库无法确定分组后取哪一行的Ship_Quantity做条件判断,因此抛出列无效错误。
  • 后续将Ship_Quantity加入GROUP BY后,相当于按每个独立的发货数值分组,无法实现所有正数、所有负数分别汇总的需求,因此结果不符合预期。

正确实现SQL

核心逻辑是新增正负值标识作为分组维度,同一客户、同一零件下,所有正数归为一组汇总,所有负数归为一组汇总。

写法1(使用SIGN函数,兼容大多数主流数据库MySQL、SQL Server、PostgreSQL等)

SELECT 
    Customer_Number,
    Part_Number,
    SUM(Shipped) AS Shipped
FROM Sales_Line
GROUP BY
    Customer_Number,
    Part_Number,
    SIGN(Shipped)
-- 可选:过滤掉汇总后为0的记录,不需要可删除下行
HAVING SUM(Shipped) != 0

写法2(使用CASE自定义分组标识,兼容所有数据库)

如果你的数据库不支持SIGN函数,可以用CASE表达式替代分组维度:

SELECT 
    Customer_Number,
    Part_Number,
    SUM(Shipped) AS Shipped
FROM Sales_Line
GROUP BY
    Customer_Number,
    Part_Number,
    CASE 
        WHEN Shipped > 0 THEN 1 
        WHEN Shipped < 0 THEN -1 
        ELSE 0 
    END

效果验证

用你提供的测试数据执行上述SQL后,会返回预期结果:

  • A080+C76组合会返回一行正数汇总(21+79+1+11+99=211)、一行负数汇总(-11-1-2-1-1=-16)
  • A045+X150组合会返回一行正数汇总(373+12+1+300+146+150+150+200+150+150=1632)、一行负数汇总(-6-1-11-2-1-1-1=-23)

内容的提问来源于stack exchange,提问作者legendaryxv2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:15:02