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

基于ID列更新表及记录,请求SQL协助生成统一递增EID

解决分组分配递增ErrorID并更新表的问题

我来帮你搞定这个给重复分组分配唯一递增errorid,并且同步更新对应记录的需求。咱们分两步走:先给每个重复的(message, type)分组生成从1000开始的递增eid,再用这个映射关系更新原表的eid字段。

步骤1:生成分组与eid的映射关系

首先,我们用CTE(公共表表达式)给每个符合条件的分组(也就是出现次数>1的(message, type)组合)分配唯一的eid。这里用ROW_NUMBER()函数实现递增,起始值设为1000:

WITH GroupEIDs AS (
    SELECT 
        message, 
        type,
        -- 从1000开始,按message和type排序生成递增eid,排序规则可按需调整
        1000 + ROW_NUMBER() OVER (ORDER BY message, type) AS eid
    FROM testing
    GROUP BY message, type
    HAVING COUNT(1) > 1
)

步骤2:更新原表的eid字段

接下来,把上面生成的eid映射关联到原表,给同一分组下的所有记录设置相同的eid:

WITH GroupEIDs AS (
    SELECT 
        message, 
        type,
        1000 + ROW_NUMBER() OVER (ORDER BY message, type) AS eid
    FROM testing
    GROUP BY message, type
    HAVING COUNT(1) > 1
)
UPDATE t
SET eid = ge.eid
FROM testing t
JOIN GroupEIDs ge 
    ON t.message = ge.message 
    AND t.type = ge.type;

可选:验证结果是否正确

如果你想确认每个分组的eid和对应的id列表是否匹配,可以把eid加到你原来的查询里:

WITH GroupEIDs AS (
    SELECT 
        message, 
        type,
        1000 + ROW_NUMBER() OVER (ORDER BY message, type) AS eid
    FROM testing
    GROUP BY message, type
    HAVING COUNT(1) > 1
)
SELECT 
    ge.eid,
    t.message, 
    t.type, 
    COUNT(1) AS total, 
    STUFF( 
        (SELECT N',' + CONVERT(NVARCHAR(MAX), id) 
         FROM dbo.testing t2 
         WHERE t2.message = t.message and t2.type = t.type 
         FOR XML PATH(''), TYPE 
        ).value('.', 'NVARCHAR(MAX)'), 
        1, 1, '' 
    ) AS id_list
FROM testing t
JOIN GroupEIDs ge ON t.message = ge.message AND t.type = ge.type
GROUP BY ge.eid, t.message, t.type
HAVING COUNT(1) > 1;

注意事项

  • 如果你的testing表还没有eid字段,需要先执行这句创建字段:
    ALTER TABLE testing ADD eid INT;
    
  • ROW_NUMBER()里的ORDER BY可以根据你的需求调整,比如想按重复次数从多到少分配eid,就改成ORDER BY COUNT(1) DESC, message, type。
  • 如果表中已有eid值,且需要保留原有值只更新未分配的,可以在UPDATE语句里加WHERE t.eid IS NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:39:26