删除部分重复的方法.doc

上传人:hw****26 文档编号:3085938 上传时间:2019-05-20 格式:DOC 页数:8 大小:31KB
下载 相关 举报
删除部分重复的方法.doc_第1页
第1页 / 共8页
删除部分重复的方法.doc_第2页
第2页 / 共8页
删除部分重复的方法.doc_第3页
第3页 / 共8页
删除部分重复的方法.doc_第4页
第4页 / 共8页
删除部分重复的方法.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、-处理表重复记录(查询和删除 )/*1、Num、Name 相同的重复值记录,没有大小关系只保留一条2、Name 相同,ID 有大小关系时,保留大或小其中一个记录整理人:中国风(Roy)日期:2008.06.06*/-1、用于查询重复处理记录( 如果列没有大小关系时 2000 用生成自增列和临时表处理,SQL2005 用 row_number 函数处理 ) (Roy)生成測試數據if not object_id(Tempdb.#T) is nulldrop table #TGoCreate table #T(ID int,Name nvarchar(1),Memo nvarchar(2)Inse

2、rt #Tselect 1,NA,NA1 union allselect 2,NA,NA2 union allselect 3,NA,NA3 union allselect 4,NB,NB1 union allselect 5,NB,NB2Go-I、Name 相同 ID 最小的记录(推荐用 1,2,3),方法 3 在 SQl05 时,效率高于 1、2方法 1:Select * from #T a where not exists(select 1 from #T where Name=a.Name and ID=b.ID group by a.ID,a.Name,a.Memo having c

3、ount(1)=1 方法 5:select * from #T a group by ID,Name,Memo having ID=(select min(ID)from #T where Name=a.Name)方法 6:select * from #T a where (select count(1) from #T where Name=a.Name and IDall(select ID from #T where Name=a.Name)方法 9(注:ID 为唯一时可用):select * from #T a where ID in(select min(ID) from #T gr

4、oup by Name)-SQL2005:方法 10:select ID,Name,Memo from (select *,min(ID)over(partition by Name) as MinID from #T a)T where ID=MinID方法 11:select ID,Name,Memo from (select *,row_number()over(partition by Name order by ID) as MinID from #T a)T where MinID=1生成结果:/*ID Name Memo- - -1 A A14 B B1(2 行受影响)*/-II

5、、Name 相同 ID 最大的记录,与 min 相反:方法 1:Select * from #T a where not exists(select 1 from #T where Name=a.Name and IDa.ID)方法 2:select a.* from #T a join (select max(ID)ID,Name from #T group by Name) b on a.Name=b.Name and a.ID=b.ID order by ID方法 3:select * from #T a where ID=(select max(ID) from #T where Na

6、me=a.Name) order by ID方法 4:select a.* from #T a join #T b on a.Name=b.Name and a.IDa.ID)=0方法 7:select * from #T a where ID=(select top 1 ID from #T where Name=a.name order by ID desc)方法 8:select * from #T a where ID! (Roy)生成測試數據if not object_id(Tempdb.#T) is nulldrop table #TGoCreate table #T(ID int

7、,Name nvarchar(1),Memo nvarchar(2)Insert #Tselect 1,NA,NA1 union allselect 2,NA,NA2 union allselect 3,NA,NA3 union allselect 4,NB,NB1 union allselect 5,NB,NB2Go-I、Name 相同 ID 最小的记录(推荐用 1,2,3),保留最小一条方法 1:delete a from #T a where exists(select 1 from #T where Name=a.Name and ID0方法 6:delete a from #T a

8、where IDany(select ID from #T where Name=a.Name)select * from #T生成结果:/*ID Name Memo- - -1 A A14 B B1(2 行受影响)*/-II、Name 相同 ID 保留最大的一条记录:方法 1:delete a from #T a where exists(select 1 from #T where Name=a.Name and IDa.ID)方法 2:delete a from #T a left join (select max(ID)ID,Name from #T group by Name) b

9、on a.Name=b.Name and a.ID=b.ID where b.Id is null方法 3:delete a from #T a where ID not in (select max(ID) from #T where Name=a.Name)方法 4(注:ID 为唯一时可用):delete a from #T a where ID not in(select max(ID)from #T group by Name)方法 5:delete a from #T a where (select count(1) from #T where Name=a.Name and IDa

10、.ID)0方法 6:delete a from #T a where ID (Roy)生成測試數據if not object_id(Tempdb.#T) is nulldrop table #TGoCreate table #T(Num int,Name nvarchar(1)Insert #Tselect 1,NA union allselect 1,NA union allselect 1,NA union allselect 2,NB union allselect 2,NBGo方法 1:if object_id(Tempdb.#) is not nulldrop table #Sele

11、ct distinct * into # from #T-排除重复记录结果集生成临时表#truncate table #T-清空表insert #T select * from # -把临时表#插入到表#T 中-查看结果select * from #T/*Num Name- -1 A2 B(2 行受影响)*/-重新执行测试数据后用方法 2方法 2:alter table #T add ID int identity-新增标识列godelete a from #T a where exists(select 1 from #T where Num=a.Num and Name=a.Name an

12、d IDa.ID)-只保留一条记录goalter table #T drop column ID-删除标识列-查看结果select * from #T/*Num Name- -1 A2 B(2 行受影响)*/-重新执行测试数据后用方法 3方法 3:declare Roy_Cursor cursor local forselect count(1)-1,Num,Name from #T group by Num,Name having count(1)1declare con int,Num int,Name nvarchar(1)open Roy_Cursorfetch next from Roy_Cursor into con,Num,Namewhile Fetch_status=0begin set rowcount con;delete #T where Num=Num and Name=Nameset rowcount 0;fetch next from Roy_Cursor into con,Num,Nameendclose Roy_Cursordeallocate Roy_Cursor-查看结果select * from #T/*Num Name- -1 A2 B(2 行受影响)*/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。