日期:2014-05-17  浏览次数:20599 次

SQL server 2008,有列:姓名、电话,电话有重复行,想在原表中只保留重复行的第一行,求语句
表名BM
电话          姓名
13300001111   张三
13300001111   李四
13300001111   鬼子
18877776666   老先生

当表中电话有重复行,而对应的姓名不同,想在原表中只保留重复行的第一行,变成以下效果
电话          姓名
13300001111   张三
18877776666   老先生

求语句,谢谢


------解决方案--------------------
是这样吗:

if object_id('tb') is not null 
drop table tb
go 

create table tb([电话] bigint,[姓名] varchar(6))

insert tb
select 13300001111,'张三' union all
select 13300001111,'李四' union all
select 13300001111,'鬼子' union all
select 18877776666,'老先生'
go


;with t
as
(
select *,
       ROW_NUMBER() over(partition by [电话]
                             order by @@servername) as rownum
from tb
)

--删除多余的数据
delete from t where rownum > 1



--查询数据,发现多余数据已经删除
select *
from tb
/*
电话          姓名
13300001111 张三
18877776666 老先生
*/