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

SQL中SUM结合CASE搭配OVER子句计算累计供应量报错如何解决?

问题根因

你的累计求和代码报错的核心原因是在窗口函数的SUM里嵌套了聚合SUM,违反了SQL的聚合执行逻辑:
你当前的weekly_commits子查询是按Plant, MaterialNumber, Calendar.WeekSort, SnapshotWeek分组的聚合查询,先计算了每周的SupplyQuantity聚合值,这时候要做累计求和,应该直接对已经算好的每周供应值做窗口求和,不应该再嵌套一层SUM(NetQuantity)。

正确修改方案

你可以任选以下一种实现方式:

方案1:直接在聚合子查询中添加窗口函数

把你注释掉的累计求和代码替换为下方内容,无需额外子查询嵌套:

-- 供应累计求和
SUM(SUM(CASE
    WHEN ReceiptORIssueIndicator = '+'
        THEN NetQuantity
    ELSE 0
END)) OVER (PARTITION BY SnapshotWeek, Plant, MaterialNumber ORDER BY Calendar.WeekSort) AS CumulativeSupplyQuantity,

说明:内层SUM是聚合计算单周供应量,外层SUM是窗口函数做累计求和,属于SQL支持的「聚合后直接套窗口函数」的合法语法

方案2:在外层主查询计算累计求和(可读性更高,推荐)

把累计求和逻辑挪到主查询中,直接对已经计算好的周供应量做累加,逻辑更清晰:

SELECT
    base_query.CommitWeek,
    base_query.SnapshotWeek,
    base_query.Plant,
    base_query.MaterialNumber,
    weekly_commits.SupplyQuantity,
    -- 累计供应逻辑写在这里
    SUM(weekly_commits.SupplyQuantity) OVER (
        PARTITION BY base_query.SnapshotWeek, base_query.Plant, base_query.MaterialNumber 
        ORDER BY base_query.CommitWeek
    ) AS CumulativeSupplyQuantity,
    weekly_commits.DemandQuantity
-- 后续主查询逻辑保持原有内容不变即可

注意事项

你原来的窗口函数PARTITION规则里多写了ReceiptORIssueIndicator字段,无需添加该字段,你已经通过CASE语句筛选了入库的数量,按快照周、工厂、物料分组就完全符合业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 02:45:08