我的表中有重复的行,如何根据单列的值删除它们?
例如
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
原文地址:https://www.jb51.cc/mssql/75994.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。