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

如何用SQL实现符合关联子公司规则的累计求和?

问题

现有一张销售明细表,需要汇总出两列:月度收入总计、累计求和。其中Company A与Company B同属一家母公司,计算累计收入时需将二者视为同一主体,但当Company A或Company B的收入为0时,其累计列需返回0。

尝试过以下SQL代码:

SUM(INCOME) OVER(PARTITION BY COMPANY ORDER BY MONTH ROWS UNBOUNDED PRECEDING) AS CUMULATIVE

得到的输出结果:

Company     Month     Income       Cumulative
Company A     1        20             20
Company B     1        0              20
Company C     1        20             20
Company A     2        20             40
Company B     2        0              40

期望的输出结果:

Company     Month     Income       Cumulative
Company A     1        20             20
Company B     1        0              0
Company C     1        20             20
Company A     2        20             40
Company B     2        0              0

请问如何实现当Company A或Company B收入为0时,累计列返回0的需求?

解决方案

可以通过以下逻辑实现需求:

  1. 先定义母公司分组字段,将Company A和Company B归为同一组,其他公司各自为一组;
  2. 计算分组下的累计收入,再通过条件判断,当前公司收入为0时返回0,否则返回分组累计值。

修改后的SQL代码示例:

SELECT
    Company,
    Month,
    Income,
    CASE
        WHEN Income = 0 THEN 0
        ELSE SUM(Income) OVER(PARTITION BY parent_group ORDER BY Month ROWS UNBOUNDED PRECEDING)
    END AS Cumulative
FROM (
    SELECT
        *,
        -- 将A和B归为同一母公司分组,其他公司保留自身名称作为分组
        CASE
            WHEN Company IN ('Company A', 'Company B') THEN 'Parent_AB'
            ELSE Company
        END AS parent_group
    FROM sales_table
) t
ORDER BY Month, Company;

逻辑说明

  • 子查询通过CASE创建parent_group字段,确保Company A和B的收入在累计计算时合并统计;
  • 外层CASE判断:若当前行收入为0,直接返回0;否则返回对应母公司分组的累计求和值,同时满足了A、B作为同一主体累计,以及收入为0时累计列显示0的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:31:15