加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server 2008:删除重复行

发布时间:2020-12-12 08:31:07 所属栏目:MsSql教程 来源:网络整理
导读:我的表中有重复的行,如何根据单列的值删除它们? 例如 uniqueid,col2,col3 ...1,john,simpson2,sally,roberts1,johnny,simpsondelete any duplicate uniqueIdsto get 1,John,Simpson2,Sally,Roberts 解决方法 你可以从cte删除: WITH cte AS (SELECT *,ROW_NU
我的表中有重复的行,如何根据单列的值删除它们?

例如

uniqueid,col2,col3 ...
1,john,simpson
2,sally,roberts
1,johnny,simpson

delete any duplicate uniqueIds
to get 

1,John,Simpson
2,Sally,Roberts

解决方法

你可以从cte删除:
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
             FROM Table)
DELETE FROM cte 
WHERE RowRank > 1

ROW_NUMBER()函数为每一行分配一个数字. PARTITION BY用于为该组中的每个项目启动编号,在这种情况下,uniqueid的每个值将开始编号为1,并从那里上升. ORDER BY确定数字进入的顺序.由于每个uniqueid从1开始编号,任何ROW_NUMBER()大于1的记录都具有重复的uniqueid

要了解ROW_NUMBER()函数的工作原理,只需尝试一下:

SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid

您可以调整ROW_NUMBER()函数的逻辑,以调整要保留或删除的记录.

例如,您可能需要多个步骤执行此操作,首先删除具有相同姓氏但名称不同的记录,您可以将姓氏添加到PARTITION BY中:

WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid,col3 ORDER BY col2)'RowRank'
             FROM Table)
DELETE FROM cte 
WHERE RowRank > 1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读