如何用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的需求?
解决方案
可以通过以下逻辑实现需求:
- 先定义母公司分组字段,将Company A和Company B归为同一组,其他公司各自为一组;
- 计算分组下的累计收入,再通过条件判断,当前公司收入为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
相关产品推荐
相关产品推荐

