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

如何改造SQL逻辑以同时展示当前财年及上一财年数据

SQL逻辑改造方案

原逻辑说明

原SQL逻辑根据输入的财年(格式如2023-2024)和月份参数,计算单个财年的年月起止范围:

IF V_MONTH='ALL' THEN
  V_YEAR_MONTH_FROM := (SUBSTR(V_YEAR, 1, 4) - 1 || '04')::NUMERIC;
  V_YEAR_MONTH_TO := (SUBSTR(V_YEAR, 6, 4) - 1 || '03')::NUMERIC;
ELSE
  IF V_MONTH IN ('01', '02', '03') THEN
    V_YEAR_MONTH_FROM := (SUBSTR(V_YEAR, 6, 4) || V_MONTH)::NUMERIC;
    V_YEAR_MONTH_TO := (SUBSTR(V_YEAR, 6, 4) || V_MONTH)::NUMERIC;
  ELSE
    V_YEAR_MONTH_FROM := (SUBSTR(V_YEAR, 1, 4) || V_MONTH)::NUMERIC;
    V_YEAR_MONTH_TO := (SUBSTR(V_YEAR, 1, 4) || V_MONTH)::NUMERIC;
  END IF;
END IF;

改造后逻辑

调整后可实现输入单个财年时,同时覆盖当前财年及上一财年的对应数据,核心是扩展年月起止范围,包含两个财年的时间段:

-- 先提取财年的两个年份,简化后续计算
curr_fy_first_year := SUBSTR(V_YEAR, 1, 4)::INT;
curr_fy_second_year := SUBSTR(V_YEAR, 6, 4)::INT;

IF V_MONTH='ALL' THEN
  -- 上一财年起始(当前财年首年-2 + 04)到当前财年结束(当前财年次年-1 + 03)
  V_YEAR_MONTH_FROM := (curr_fy_first_year - 2 || '04')::NUMERIC;
  V_YEAR_MONTH_TO := (curr_fy_second_year - 1 || '03')::NUMERIC;
ELSE
  IF V_MONTH IN ('01', '02', '03') THEN
    -- 上一财年对应月份(当前财年首年 + 月份)到当前财年对应月份(当前财年次年 + 月份)
    V_YEAR_MONTH_FROM := (curr_fy_first_year || V_MONTH)::NUMERIC;
    V_YEAR_MONTH_TO := (curr_fy_second_year || V_MONTH)::NUMERIC;
  ELSE
    -- 上一财年对应月份(当前财年首年-1 + 月份)到当前财年对应月份(当前财年首年 + 月份)
    V_YEAR_MONTH_FROM := (curr_fy_first_year - 1 || V_MONTH)::NUMERIC;
    V_YEAR_MONTH_TO := (curr_fy_first_year || V_MONTH)::NUMERIC;
  END IF;
END IF;

逻辑验证

以输入财年2023-2024为例:

  • 当V_MONTH='ALL'时,起止年月为202104到202303,覆盖2022-2023财年(2021.04-2022.03)和2023-2024财年(2022.04-2023.03)的全部数据
  • 当V_MONTH='01'时,起止年月为202301到202401,包含2022-2023财年的1月和2023-2024财年的1月数据
  • 当V_MONTH='04'时,起止年月为202204到202304,包含2022-2023财年的4月和2023-2024财年的4月数据

内容的提问来源于stack exchange,提问作者Biswajit kumar singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:04:51