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

非动态SQL下按指定月份列求和填充YTD列的最优方法

无需动态SQL的YTD列计算方案

核心逻辑

由于表的月份列是固定的(2024M1至2024M4),直接通过CASE表达式结合变量判断每个月份列是否属于目标范围,将符合条件的列值累加即可,完全不需要动态SQL。

更新YTD列的代码实现

假设表名为monthly_data,定义目标月份变量后执行更新:

DECLARE @target_month VARCHAR(6) = '2024M3';

UPDATE monthly_data
SET YTD = 
    (CASE WHEN '2024M1' <= @target_month THEN [2024M1] ELSE 0 END) +
    (CASE WHEN '2024M2' <= @target_month THEN [2024M2] ELSE 0 END) +
    (CASE WHEN '2024M3' <= @target_month THEN [2024M3] ELSE 0 END) +
    (CASE WHEN '2024M4' <= @target_month THEN [2024M4] ELSE 0 END);

查询时实时计算YTD(无需更新表)

如果不需要持久化YTD值,仅在查询时计算:

DECLARE @target_month VARCHAR(6) = '2024M3';

SELECT 
    [2024M1], [2024M2], [2024M3], [2024M4],
    (CASE WHEN '2024M1' <= @target_month THEN [2024M1] ELSE 0 END) +
    (CASE WHEN '2024M2' <= @target_month THEN [2024M2] ELSE 0 END) +
    (CASE WHEN '2024M3' <= @target_month THEN [2024M3] ELSE 0 END) +
    (CASE WHEN '2024M4' <= @target_month THEN [2024M4] ELSE 0 END) AS YTD
FROM monthly_data;

关键说明

  • 月份字符串2024M1、2024M2等可以直接按字符串规则比较大小,无需额外转换日期格式,逻辑简单高效。
  • 后续若新增月份列(如2024M5至2024M12),只需在CASE分支中添加对应列的判断即可,无需改动整体逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:48:19