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

Oracle中基于不同条件对同一列求和的实现方法咨询

实现需求的Oracle SQL语句

嘿,针对你提出的汇总需求,我写了下面的Oracle SQL语句,用条件聚合和窗口函数就能完美实现你要的结果,而且和你期望的输出格式完全匹配:

SELECT
    Item,
    SubItem,
    Loc,
    -- Sum1: 按SubItem和Loc汇总所有Type的Qty
    SUM(Qty) AS Sum1,
    -- Sum2: 按SubItem和Loc仅汇总Type1、Type4的Qty
    SUM(CASE WHEN Type IN ('Type1', 'Type4') THEN Qty ELSE 0 END) AS Sum2,
    -- Sum3: 按Item和Loc汇总Type1、Type4的Qty(窗口函数实现跨SubItem的汇总)
    SUM(CASE WHEN Type IN ('Type1', 'Type4') THEN Qty ELSE 0 END) 
        OVER (PARTITION BY Item, Loc) AS Sum3
FROM
    你的表名 -- 记得替换成实际的表名
GROUP BY
    Item, SubItem, Loc
ORDER BY
    Item, SubItem;

关键逻辑说明:

  • Sum1:直接对Qty求和,因为是按SubItem和Loc分组,自然会汇总该分组下所有Type的数量。
  • Sum2:用CASE WHEN筛选出Type1和Type4的记录,只对这些记录的Qty求和,其他Type的数量按0处理,不影响总和。
  • Sum3:使用窗口函数OVER (PARTITION BY Item, Loc),让同一个Item和Loc下的所有行共享同一个汇总值,这样每个SubItem行都会显示对应的Item+Loc级别Type1、Type4的总数量。

执行这个语句后,你会得到和期望完全一致的结果:

ItemSubItemLocSum1Sum2Sum3
D1SD1L1302055
D1SD2L1251555

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:24:29