如何根据月份范围从多季度数据中提取计划金额
解决方案:跨季度计划金额计算
由于没有月度明细数据,我们可以通过拆分每个季度的贡献来准确计算任意月份范围的计划金额——核心逻辑是假设每个季度内的金额平均分布到3个月份,然后分别计算目标范围覆盖每个季度的月份数,再乘以对应季度的月均金额,最后求和。
完整SQL代码
DECLARE @monthStart NUMERIC(20, 5), @monthEnd NUMERIC(20, 5) SET @monthStart = 2 SET @monthEnd = 8; SELECT plan_nextYear_Total, plan_nextYear_price, plan_nextYear_qty, q1_nextyear, q2_nextyear, q3_nextyear, q4_nextyear, -- 计算每个季度的贡献并求和 ( -- Q1(1-3月)的贡献:覆盖月份数 × Q1月均金额 MAX(0, MIN(3, @monthEnd) - MAX(1, @monthStart) + 1) * (plan_nextYear_price * q1_nextyear) / 3 + -- Q2(4-6月)的贡献 MAX(0, MIN(6, @monthEnd) - MAX(4, @monthStart) + 1) * (plan_nextYear_price * q2_nextyear) / 3 + -- Q3(7-9月)的贡献 MAX(0, MIN(9, @monthEnd) - MAX(7, @monthStart) + 1) * (plan_nextYear_price * q3_nextyear) / 3 + -- Q4(10-12月)的贡献 MAX(0, MIN(12, @monthEnd) - MAX(10, @monthStart) + 1) * (plan_nextYear_price * q4_nextyear) / 3 ) AS RangedPlan FROM planning_sales_dynamic
逻辑说明
覆盖月份数计算:
对每个季度,用MAX(0, MIN(季度末月, @monthEnd) - MAX(季度首月, @monthStart) + 1)计算目标范围覆盖该季度的月份数。如果范围不覆盖该季度,结果为0,不会产生额外贡献。
例如:- 当
@monthStart=1、@monthEnd=5时,Q1覆盖3个月(1-3),Q2覆盖2个月(4-5),Q3/Q4覆盖0个月。
- 当
季度月均金额:
每个季度的总金额是plan_nextYear_price * q#_nextyear,除以3得到月均金额(这是在无月度数据下最合理的近似假设)。总金额求和:
将四个季度的贡献相加,得到目标月份范围的总计划金额。
对比原错误逻辑
你之前尝试的跨季度逻辑((q1金额 + q2金额) * 总月数)/6假设Q1和Q2的月均金额相等,但实际上两个季度的总金额可能差异很大。新方案会分别用每个季度的实际金额计算月均,再乘以覆盖的月份数,结果更符合实际数据。
内容的提问来源于stack exchange,提问作者Coda759
相关产品推荐
相关产品推荐

