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

SQL Server 中实现遇ColA为70时自动递增的分组ID列方法

SQL Server实现按ColA=70触发分组编号递增方案

核心逻辑是用SUM() OVER()窗口累加函数,遇到ColA=70时累加1,其余时候累加0,得到的结果就是你需要的DesiredColumn值。

完整实现代码

1. 模拟测试表数据

-- 建测试表
CREATE TABLE #TestTable (
    ColA INT,
    Date VARCHAR(10),
    RSN INT,
    ID VARCHAR(20)
);
-- 插入样例数据
INSERT INTO #TestTable (ColA, Date, RSN, ID)
VALUES
(70, '0904', 2, '0904-2'),
(71, '0904', 3, '0904-3'),
(100, '0904', 4, '0904-4'),
(70, '0904', 5, '0904-5');

2. 计算DesiredColumn的查询语句

注意你需要按实际业务的排序规则调整ORDER BY的字段,这里样例按RSN升序排序保证顺序和你给出的样例一致:

SELECT 
    ColA,
    Date,
    RSN,
    ID,
    SUM(CASE WHEN ColA = 70 THEN 1 ELSE 0 END) OVER (ORDER BY RSN ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS DesiredColumn
FROM #TestTable;

结果说明

执行以上查询得到的结果和你给出的样例完全匹配:

ColADateRSNIDDesiredColumn
70090420904-21
71090430904-31
100090440904-41
70090450904-52

持久化存储该列的方案

如果需要把计算结果落到表中存储,可选择以下两种方式:

  • 新增计算列:如果数据更新后需要自动同步值,可新增持久化计算列(仅适用于排序逻辑固定的场景)
  • 批量更新:新增普通列后执行UPDATE语句批量写入值:
-- 新增列
ALTER TABLE #TestTable ADD DesiredColumn INT;
-- 批量更新值
WITH CTE AS (
    SELECT 
        DesiredColumn,
        SUM(CASE WHEN ColA = 70 THEN 1 ELSE 0 END) OVER (ORDER BY RSN ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS CalcVal
    FROM #TestTable
)
UPDATE CTE SET DesiredColumn = CalcVal;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:54:02