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

SQL Server中按ID去重:含Y则留Y,仅含N则保留

SQL Server 按ID保留指定Check记录的实现方案

需求说明

针对目标表,需按以下规则处理重复ID的记录:

  • 若同一ID存在Check为Y的记录,仅保留其中一条Y记录(其余同ID行删除)
  • 若ID仅存在Check为N的记录,则保留该记录
  • 需保留表中所有其他列

实现方法

方法1:查询目标结果(不修改原表)

使用窗口函数ROW_NUMBER()给每个ID分组排序,优先保留Check='Y'的记录,再提取每组的第一条数据:

WITH RankedRecords AS (
    SELECT 
        *,
        -- 按ID分组,Y优先级高于N,给Y标记排序值0,N标记1
        ROW_NUMBER() OVER (
            PARTITION BY ID 
            ORDER BY CASE WHEN [Check] = 'Y' THEN 0 ELSE 1 END
        ) AS RowNum
    FROM YourTableName -- 替换为实际表名
)
SELECT * -- 可指定具体列,避免返回RowNum
FROM RankedRecords
WHERE RowNum = 1;

方法2:直接删除冗余行(修改原表)

如果需要直接清理原表中的冗余数据,可基于同样的排序逻辑删除RowNum>1的行:

WITH RankedRecords AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY ID 
            ORDER BY CASE WHEN [Check] = 'Y' THEN 0 ELSE 1 END
        ) AS RowNum
    FROM YourTableName -- 替换为实际表名
)
DELETE FROM RankedRecords
WHERE RowNum > 1;

注意事项

  • Check是SQL Server的关键字,必须用方括号[Check]包裹列名
  • 若同一ID存在多条Check='Y'的记录,上述逻辑会保留排序后的第一条;若需保留所有Y记录,可调整窗口函数为RANK()并筛选Rank=1
  • 执行删除操作前建议先备份数据,或先用查询语句验证结果是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:52:11