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

在Microsoft SQL Server中如何筛选唯一ID(关联字段值可任选)

如何在SQL Server中为每个重复ID保留任意一条关联记录

嘿,我来帮你搞定这个问题!在SQL Server里处理重复ID,只需要每个唯一ID保留任意一条关联字段的记录,有几种简单又好用的方法,我给你详细说说:

方法一:用ROW_NUMBER()窗口函数(最灵活)

这个方法不管关联字段的值是否相同都能完美适用,还能灵活控制“任意”的逻辑(比如随机取,或者按某个字段取第一条):

WITH RankedRecords AS (
    SELECT 
        ID,
        -- 替换成你实际的关联字段
        YourField1,
        YourField2,
        -- 按ID分组,组内随机排序(要任意的话用NEWID()最稳妥)
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY NEWID()) AS RowNum
    FROM YourTableName -- 替换成你的表名
)
SELECT ID, YourField1, YourField2
FROM RankedRecords
WHERE RowNum = 1;

如果不需要完全随机,你也可以把ORDER BY NEWID()换成比如ORDER BY (SELECT NULL),不过NEWID()能确保每次取的是真正的任意一条,不会因为SQL Server的默认排序导致结果固定。

方法二:用GROUP BY + 聚合函数(简洁高效)

如果你完全不在意关联字段取的是哪个值(比如最大值、最小值都可以),这个方法更简洁,性能也更好,适合处理大表:

SELECT 
    ID,
    -- 用MAX/MIN取任意一个关联字段值,替换成你的实际字段
    MAX(YourField1) AS YourField1,
    MIN(YourField2) AS YourField2
FROM YourTableName -- 替换成你的表名
GROUP BY ID;

这里的MAX/MIN只是示例,只要是能对字段类型生效的聚合函数都可以,比如对于字符串类型,MAX会取字典序最大的,MIN取最小的,但不管怎样,每个ID只会返回一条记录。

方法三:用TOP 1 WITH TIES(写法最简洁)

这个是方法一的简化版,不需要CTE,一行搞定:

SELECT TOP 1 WITH TIES
    ID,
    YourField1,
    YourField2
FROM YourTableName
ORDER BY ROW_NUMBER() OVER (PARTITION BY ID ORDER BY NEWID());

效果和方法一完全一样,只是写法更紧凑,适合快速写查询的时候用。

记得把上面代码里的YourTableName、YourField1、YourField2都替换成你实际的表名和字段名哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:08:27