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

如何实现满足特定逻辑的SQL计算列Col3?求解决方案

实现依赖前一行计算结果的Col3计算列

数据集

Record_NumberCol1Col2Col3 (预期结果)
11231123
24561456
37892456
41472456
52583258
68524258
79632258
82131213

需求

创建计算列Col3,逻辑如下:

  • 当Col2等于1或3时,返回当前行的Col1
  • 否则返回上一行的Col3计算结果

原方法的问题

你尝试的LAG()函数无法实现这个逻辑,因为窗口函数是基于整个数据集的原始列计算的,无法引用当前查询中正在生成的Col3列——LAG(Col3)访问的是还未计算完成的列值,自然得不到正确结果。

正确实现:递归CTE

递归CTE可以逐行处理数据,继承上一行的计算结果,完美适配这种依赖前一行的逻辑:

WITH RecursiveCTE AS (
    -- 锚点成员:处理第一行,直接取Col1作为Col3
    SELECT 
        Record_Number,
        Col1,
        Col2,
        CAST(Col1 AS INT) AS Col3
    FROM tbl1
    WHERE Record_Number = 1

    UNION ALL

    -- 递归成员:逐行处理后续数据,继承上一行的Col3值
    SELECT 
        t.Record_Number,
        t.Col1,
        t.Col2,
        CASE 
            WHEN t.Col2 IN (1, 3) THEN t.Col1
            ELSE r.Col3
        END AS Col3
    FROM tbl1 t
    JOIN RecursiveCTE r ON t.Record_Number = r.Record_Number + 1
)
SELECT * FROM RecursiveCTE ORDER BY Record_Number;

代码说明

  1. 锚点成员:定位到第一行数据,直接将Col1赋值给Col3(符合第一行Col2=1的规则)
  2. 递归成员:通过Record_Number关联上一行的递归结果,判断当前行Col2是否满足条件:
    • 满足条件则取当前Col1
    • 不满足则用上一行的Col3值
  3. 最后查询递归CTE的结果,按Record_Number排序即可得到预期的Col3列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:27:16