SQL Server 2008:删除重复行
发布时间:2020-05-25 04:35:33 所属栏目:MsSql 来源:互联网
导读:我的表中有重复的行,如何根据单列的值删除它们? 例如 uniqueid, col2, col3 ...1, john, simpson2, sally, roberts1, johnny, simpsondelete any duplicate uniqueIdsto get 1, John, Simpson2, Sally, Roberts 你可以从cte删除: WITH ct
|
我的表中有重复的行,如何根据单列的值删除它们? 例如 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 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- .net – 强制执行单元测试永远不应该与实时数据库/ Web服务
- 用户数据的No-SQL(Cassandra)数据建模
- sql-server – 在SQL Server 2005中创建一个新的db用户
- sql-server – 如何在使用Entity Framework时设置最大数据库
- SQLServer的备份和灾难恢复
- SSIS:脚本任务(vs15)在sql server 2014上部署时不起作用
- sql-server – 如何版本SQL Server数据库?
- SQL Server 错误代码大全及解释(留着备用)
- C#控制台程序实现开启、关闭SQLServer服务的代码分享
- SQL Server 存储过程解密(破解函数,过程,触发器,视图.仅限于
