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

SQL Server表重复数据删除需求:基于col1-col3删除col6-col8均为0的重复行

解决SQL Server重复数据删除问题

我来帮你搞定这个重复数据清理的需求,针对你的SQL Server表,我们可以用CTE(公共表表达式)结合窗口函数来精准删除目标重复行,具体方案如下:

核心思路

我们需要先按col1、col2、col3分组识别重复数据,然后在每个重复组里,只删除那些同时满足col6=0、col7=0、col8=0的重复行(保留每组里至少一行,优先保留非0的行)。

具体SQL代码

首先,用ROW_NUMBER()窗口函数给每个重复组的行编号,把要删除的0行排在组内的后面,这样就能精准筛选出要删除的记录:

WITH DuplicateRows AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY col1, col2, col3 
            ORDER BY 
                -- 把非0的行排在前面,确保它们的RowNum为1(保留)
                CASE WHEN col6 = 0 AND col7 = 0 AND col8 = 0 THEN 1 ELSE 0 END,
                -- 可以加上其他字段辅助排序,保证编号逻辑稳定
                col4, col5, col9, col10
        ) AS RowNum
    FROM YourTableName -- 替换成你的实际表名
)
-- 删除重复组里RowNum>1且满足三个0条件的行
DELETE FROM DuplicateRows
WHERE RowNum > 1 
  AND col6 = 0 
  AND col7 = 0 
  AND col8 = 0;

验证与注意事项

  • 先验证再删除:执行DELETE前,建议先把语句改成SELECT * FROM DuplicateRows WHERE ...,检查要删除的行是否符合预期,避免误删数据。
  • 表名替换:记得把YourTableName替换成你实际使用的表名称。
  • 主键优化:如果你的表有主键(比如id列),可以把主键加到ORDER BY子句里,让编号逻辑更精准。
  • 特殊场景处理:如果某个重复组里所有行都是col6=0、col7=0、col8=0,这个方案会保留RowNum=1的那一行,其他重复的0行被删除,符合“删除重复行”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:29:16