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

如何检测按id分组的重复行组?SQL实现求助

检测按ID分组的重复行组解决方案

你的代码问题在于仅检查了单条重复行,而非整个ID对应的行集合是否完全重复(包括行数和每行内容)。要实现需求,需先为每个ID生成唯一标识其所有行的“指纹”,再判断是否存在不同ID共享同一指纹的情况。

实现代码

declare @t2 Table( m1 int, m2 int,n varchar(50),n2 varchar(50), id int)

insert into @t2 values(3,1,'c','',1),(2,1,'s','o',1),(2,1,'s','o',2),(3,1,'c','',2),(3,1,'f','',2)

-- 生成每个ID对应的行组指纹
WITH IdGroupFingerprints AS (
    SELECT 
        id,
        -- 用分隔符拼接每行内容,排序确保同一行组的拼接顺序固定
        STRING_AGG(
            CONCAT(m1, '|', m2, '|', ISNULL(n, ''), '|', ISNULL(n2, '')), 
            ';'
        ) WITHIN GROUP (ORDER BY m1, m2, n, n2) AS group_fingerprint
    FROM @t2
    GROUP BY id
)

-- 检查是否存在重复的行组指纹
IF EXISTS (
    SELECT 1
    FROM IdGroupFingerprints
    GROUP BY group_fingerprint
    HAVING COUNT(DISTINCT id) > 1
)
begin
    select '存在重复行组'
end
else 
begin
    select '未找到重复行组'
end

关键细节说明

  • 分隔符使用:用|分隔每行的字段,;分隔不同行,避免字段内容拼接时产生歧义(比如m1=12,m2=3和m1=1,m2=23不会被误判为相同)。
  • 空值处理:用ISNULL将空字符串转为明确的空标识,避免空值导致的拼接差异。
  • 固定排序:WITHIN GROUP (ORDER BY ...)确保同一ID的行始终按固定顺序拼接,不受插入顺序影响,保证指纹的唯一性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:06:24