日期:2014-05-18 浏览次数:20689 次
CREATE TABLE STU
(
stu_number varchar(20),
stu_name varchar(20),
stu_age int
)
INSERT INTO STU
SELECT '110','张三',10 UNION
SELECT '110','张三',10 UNION
SELECT '111','李四',11 UNION
SELECT '111','李四',11 UNION
SELECT '112','王五',10
CREATE TABLE STU
(
stu_number varchar(20),
stu_name varchar(20),
stu_age int
)
INSERT INTO STU
SELECT '110','张三',10 UNION all
SELECT '110','张三',10 UNION all
SELECT '111','李四',11 UNION all
SELECT '111','李四',11 UNION all
SELECT '112','王五',10
select * from STU
stu_number stu_name stu_age
-------------------- -------------------- -----------
110 张三 10
110 张三 10
111 李四 11
111 李四 11
112 王五 10
delete STU
from
(select row_number() over(partition by stu_number,stu_name,stu_age order by (select 0)) rn, * from STU) STU
where rn>1
select * from STU
stu_number stu_name stu_age
-------------------- -------------------- -----------
110 张三 10
111 李四 11
112 王五 10
------解决方案--------------------
CREATE TABLE STU
(
stu_number nvarchar(20),
stu_name nvarchar(20),
stu_age int
)
INSERT INTO STU
SELECT '110',N'张三',10 UNION all
SELECT '110',N'张三',10 UNION all
SELECT '111',N'李四',11 UNION all
SELECT '111',N'李四',11 UNION all
SELECT '112',N'王五',10
go
alter table STU add ID int identity
go
DELETE STU where ID not in(select min(ID) from STU group by stu_number,stu_name,stu_age)
go
alter table STU drop COLUMN ID
GO
SELECT * FROM STU
/*
stu_number stu_name stu_age
110 张三 10
111 李四 11
112 王五 10
*/
DROP TABLE STU
------解决方案--------------------
CREATE TABLE studentage
(
tid int identity(1,1) not null,
primary key(tid),
stu_number nvarchar(20),
stu_name nvarchar(20),
stu_age int
)
--select * from studentage
--drop table studentage
--delete studentage
INSERT INTO studentage values('110',N'张三',10 )
INSERT INTO studentage values('110',N'张三',10 )
INSERT INTO studentage values('111',N'李四',11 )
INSERT INTO studentage values('111',N'李四',11 )
INSERT INTO studentage values('112',N'王五',10 )
/*select stu_number as 学生编号,stu_name as 学生姓名,stu_age as 学生年龄
from studentage group by stu_number,stu_name,stu_age*/
delete studentage where tid not in(select max(tid) from studentage group by stu_number,stu_name,stu_age)
select * from studentage
------解决方案--------------------
IF OBJECT_ID('STU','U') IS NOT NULL
DROP TABLE STU
GO
CREATE TABLE STU
(
stu_number varchar(20),
stu_name varchar(20),
stu_age int
)
INSERT INTO STU
SELECT '110','张三',10 UNION ALL
SELECT '110','张三',10 UNION ALL
SELECT '111','李四',11 UNION ALL
SELECT '111','李四',11 UNION ALL
SELECT '112','王五',10
--方法一使用临时表
select distinct stu_number,stu_name,stu_age into #t from STU
delete stu
insert into stu select * from #t
select * from stu
--方法二
delete a from (select *,row=row_number() over(partition by stu_number,stu_name,stu_age order by getdate()) from stu) a where row>1
/*
stu_number stu_name stu_age
-------------------- -------------------- -----------
110 张三 10
111 李四 11
112 王五 10
(3 行受影响)
*/
------解决方案-----------------