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

SQL Server 2022中跨年度InterimData累计差值计算求助

解决方案(SQL Server 2022)

步骤分解

  • 第一步:聚合提取每年的唯一InterimData值,同一年份内所有记录的该值一致,用GROUP BY即可实现。
  • 第二步:使用LAG()窗口函数获取上一年的计算结果,结合常量12800推导当年的最终值。
  • 第三步:动态拼接计算逻辑的文本说明,匹配预期输出格式。

完整SQL代码

WITH YearlyData AS (
    -- 提取每年唯一的InterimData值
    SELECT 
        年份,
        MAX(临时数据(InterimData)) AS YearlyInterimData -- 同一年所有值相同,MAX/MIN/AVG均可
    FROM YourTableName -- 替换为你的实际表名
    GROUP BY 年份
),
FinalCalculations AS (
    -- 计算每年的FinalValue和逻辑说明
    SELECT 
        年份,
        -- 第一年用常量减去当年值,后续年份用上一年结果减当年值
        CASE 
            WHEN LAG(YearlyInterimData) OVER (ORDER BY 年份) IS NULL 
            THEN 12800 - YearlyInterimData
            ELSE LAG(12800 - YearlyInterimData) OVER (ORDER BY 年份) - YearlyInterimData
        END AS 最终值(FinalValue),
        -- 拼接逻辑文本
        CASE 
            WHEN LAG(YearlyInterimData) OVER (ORDER BY 年份) IS NULL 
            THEN '(Constant - ' + CAST(年份 AS VARCHAR) + '年唯一InterimData值)'
            ELSE '(' + CAST(LAG(年份) OVER (ORDER BY 年份) AS VARCHAR) + '年FinalValue - ' + CAST(年份 AS VARCHAR) + '年唯一InterimData值)'
        END AS 计算逻辑(Logic)
    FROM YearlyData
)
SELECT * FROM FinalCalculations ORDER BY 年份;

代码说明

  1. YearlyData CTE:通过GROUP BY 年份聚合,确保每个年份仅保留一个InterimData值,用MAX()可避免NULL值干扰。
  2. FinalCalculations CTE:
    • 利用LAG()函数判断是否为第一年(无前置记录),分别执行对应计算逻辑。
    • 动态拼接逻辑说明文本,完全匹配预期输出的描述格式。
  3. 最后按年份排序输出,保证结果顺序正确。

执行结果

运行代码后将得到与预期一致的输出:

年份最终值(FinalValue)计算逻辑(Logic)
20228933.333333(Constant - 2022年唯一InterimData值)
20231516.666666(2022年FinalValue - 2023年唯一InterimData值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:05:01