• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > mssql2005教程 >

SQL Server2008中删除重复记录的方法分享

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-07-01点击:

在Database中可能由于某种原因如用户输入,导入数据失败等 导致了重复记录. 如果你没有用主键,约束,或来其它机制实现数据完整性,那最后总是重复记录在你的数据库中。

现在让我们来看在SQL SERVER 2008中如何删除这些记录, 首先,可以模拟造一些简单重复记录:

  1. Create Table dbo.Employee (  
  2. [Id] int Primary KEY ,  
  3. [Name] varchar(50),  
  4. [Age] int,  
  5. [Sex] bit default 1  
  6. )  
  7. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(1,'James',25,default)  
  8. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(2,'James',25,default)  
  9. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(3,'James',25,default)  
  10. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(4,'Lisa',24,0)  
  11. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(5,'Lisa',24,0)  
  12. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(6,'Lisa',24,0)  
  13. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(7,'Mirsa',23,0)  
  14. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(8,'Mirsa',23,0)  
  15. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(9,'Mirsa',23,0)  
  16. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(10,'John',26,default)  
  17. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(11,'Abraham',28,default)  
  18. Insert Into Employee ([Id] , [Name] , [Age] , [Sex] ) Values(12,'Lincoln',30,default)  

OK,首先我们使用最常见的方法: 

  1. Delete From Employee Where Name in (select NameFrom Employee Group By Name Having Count(Name)>1);  
  2. 接着使用RowNumber():  
  3.  
  4. Delete T From( Select Row_Number() Over(Partition By [Name] Order By (SELECT 0)) 
  5. As RowNumber,* From Employee) TWhere T.RowNumber > 1;  

还可以使用CTE (Common Table Expressions):

  1. With Dups as  
  2. (  
  3. select ROW_NUMBER() Over(Partition by [Name] Order by (SELECT 0)) as rn  
  4. FROM Employee  
  5. )  
  6. Delete From Dups  
  7. Where rn>1;  

再加上RANK()的CTE: 

  1. WITH Dups As  
  2. (  
  3. Select [ID],[Name],[Age],[Sex]  
  4. , ROW_NUMBER() OVER(Partition By [Name] Order By (SELECT 0)) AS rn  
  5. ,RANK() OVER(Partition By [Name] Order By (SELECT 0)) AS rnk  
  6. FROM Employee  
  7. )  
  8. DELETE FROM Dups  
  9. WHERE rn<>rnk;  
猜你也喜欢看这些...

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ