代码改变世界

SqlServer中使用row_number()在一个查询中删除重复记录

2013-02-27 13:25  Sam Jin  阅读(632)  评论(0)    收藏  举报
If Exists(Select * From tempdb.Information_Schema.Tables Where Table_Name Like '#Temp%') 
Drop Table #temp 
Create Table #temp ([Id] int, [Name] varchar(50), [Age] int, [Sex] bit default 1) 
Go 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(1,'James',25,default) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(1,'James',25,default) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(1,'James',25,default) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(2,'Lisa',24,0) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(2,'Lisa',24,0) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(2,'Lisa',24,0) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(3,'Mirsa',23,0) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(3,'Mirsa',23,0) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(3,'Mirsa',23,0) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(4,'John',26,default) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(5,'Abraham',28,default) 
Insert Into #temp ([Id] , [Name] , [Age] , [Sex] ) Values(6,'Lincoln',30,default) 
Delete T From 
(Select Row_Number() Over(Partition By [ID],[Name],[Age],[Sex] order By [ID]) As RowNumber,* From #Temp)T 
Where T.RowNumber > 1 
Select * From #temp