跪求 sqlserver中删除根据多个字段查询出来的重复记录保留一条就可以了。
本人用的sql2000;
比如 表明是 People,它有name,sex,age,love,marry 这5个字段。例:数据如下
name sex age love marry
张三 N 22 足球 否
张三 F 50 篮球 否
张三 N 50 篮球 否
赵六 F 30 上网 是
赵六 N 30 上网 是
赵六 N 30 听音乐 是
现在根据name 和sex 两个字段查询数据,可以看到name和sex同时相同的只有 (张三 N) 和(赵六 N)。两个字段同时相同的数据只保留一条就可以了。比如(张三 N 。。。 )和(赵六 N。。。)分别保留一条数据就可以了。结果只有 张三 N 、张三 F、赵六 N、赵六 F 这四条数据了。
求sql语句。
在线等。。。
sqlserver 删除重复记录?保留一条
[解决办法]
SELECT [name],[sex],[age],[love],[marry]
FROM
(
SELECT *,rn=ROW_NUMBER() OVER(PARTITION BY [name],[sex] ORDER BY GETDATE())
FROM [People]
) T
WHERE rn=1
create table People
(name varchar(10), sex varchar(10), age int, love varchar(10), marry varchar(10))
insert into People
select '张三', 'N', 22, '足球', '否' union all
select '张三', 'F', 50, '篮球', '否' union all
select '张三', 'N', 50, '篮球', '否' union all
select '赵六', 'F', 30, '上网', '是' union all
select '赵六', 'N', 30, '上网', '是' union all
select '赵六', 'N', 30, '听音乐', '是'
select distinct name,sex from People
/*
name sex
---------- ----------
张三 F
张三 N
赵六 F
赵六 N
(4 row(s) affected)
*/
select identity(int,1,1) 'rn',*
into #t
from People
select a.name,a.sex,a.age,a.love,a.marry
from #t a
where not exists(select 1 from #t b
where b.rn<a.rn and b.name=a.name and b.sex=a.sex)
/*
name sex age love marry
---------- ---------- ----------- ---------- ----------
张三 N 22 足球 否
张三 F 50 篮球 否
赵六 F 30 上网 是
赵六 N 30 上网 是
(4 row(s) affected)
*/
while 1=1
begin
delete top (1) from People
from People a join ( select name,sex from People group by name,sex having COUNT(*)>1 ) b
on a.name=b.name and a.sex=b.sex
if @@ROWCOUNT=0 break;
end;
create table People
(name varchar(10), sex varchar(10), age int, love varchar(10), marry varchar(10))
insert into People
select '张三', 'N', 22, '足球', '否' union all
select '张三', 'F', 50, '篮球', '否' union all
select '张三', 'N', 50, '篮球', '否' union all
select '赵六', 'F', 30, '上网', '是' union all
select '赵六', 'N', 30, '上网', '是' union all
select '赵六', 'N', 30, '听音乐', '是'
select identity(int,1,1) 'rn',*
into #t
from People
truncate table People
insert into People
select a.name,a.sex,a.age,a.love,a.marry
from #t a where not exists(select 1 from #t b
where b.rn<a.rn and b.name=a.name and b.sex=a.sex)
select * from People
/*
name sex age love marry
---------- ---------- ----------- ---------- ----------
张三 N 22 足球 否
张三 F 50 篮球 否
赵六 F 30 上网 是
赵六 N 30 上网 是
(4 row(s) affected)
*/