欢迎来到天天文库
浏览记录
ID:40789066
大小:31.00 KB
页数:8页
时间:2019-08-07
《删除部分重复的方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、--处理表重复记录(查询和删除)/******************************************************************************************************************************************************1、Num、Name相同的重复值记录,没有大小关系只保留一条2、Name相同,ID有大小关系时,保留大或小其中一个记录整理人:中国风(Roy)日期:2008.06.06*****************************
2、*************************************************************************************************************************/--1、用于查询重复处理记录(如果列没有大小关系时2000用生成自增列和临时表处理,SQL2005用row_number函数处理)-->-->(Roy)生成測試數據ifnotobject_id('Tempdb..#T')isnulldroptable#TGoCreatetable#T([ID]int,[Name]n
3、varchar(1),[Memo]nvarchar(2))Insert#Tselect1,N'A',N'A1'unionallselect2,N'A',N'A2'unionallselect3,N'A',N'A3'unionallselect4,N'B',N'B1'unionallselect5,N'B',N'B2'Go--I、Name相同ID最小的记录(推荐用1,2,3),方法3在SQl05时,效率高于1、2方法1:Select*from#Tawherenotexists(select1from#TwhereName=a.NameandID4、方法2:selecta.*from#Tajoin(selectmin(ID)ID,Namefrom#TgroupbyName)bona.Name=b.Nameanda.ID=b.ID方法3:select*from#TawhereID=(selectmin(ID)from#TwhereName=a.Name)方法4:selecta.*from#Tajoin#Tbona.Name=b.Nameanda.ID>=b.IDgroupbya.ID,a.Name,a.Memohavingcount(1)=1方法5:select*from#TagroupbyID,Na5、me,MemohavingID=(selectmin(ID)from#TwhereName=a.Name)方法6:select*from#Tawhere(selectcount(1)from#TwhereName=a.NameandIDall(selectIDfrom#TwhereName=a.Name)方法9(注:ID为唯一时可用):selec6、t*from#TawhereIDin(selectmin(ID)from#TgroupbyName)--SQL2005:方法10:selectID,Name,Memofrom(select*,min(ID)over(partitionbyName)asMinIDfrom#Ta)TwhereID=MinID方法11:selectID,Name,Memofrom(select*,row_number()over(partitionbyNameorderbyID)asMinIDfrom#Ta)TwhereMinID=1生成结果:/*IDNameMemo----7、---------------1AA14BB1(2行受影响)*/--II、Name相同ID最大的记录,与min相反:方法1:Select*from#Tawherenotexists(select1from#TwhereName=a.NameandID>a.ID)方法2:selecta.*from#Tajoin(selectmax(ID)ID,Namefrom#TgroupbyName)bona.Name=b.Nameanda.ID=b.IDorderbyID方法3:select*from#TawhereID=(selectmax(ID)from#Twhe8、reName=a.Name)orderbyID方法4:selecta.*from
4、方法2:selecta.*from#Tajoin(selectmin(ID)ID,Namefrom#TgroupbyName)bona.Name=b.Nameanda.ID=b.ID方法3:select*from#TawhereID=(selectmin(ID)from#TwhereName=a.Name)方法4:selecta.*from#Tajoin#Tbona.Name=b.Nameanda.ID>=b.IDgroupbya.ID,a.Name,a.Memohavingcount(1)=1方法5:select*from#TagroupbyID,Na
5、me,MemohavingID=(selectmin(ID)from#TwhereName=a.Name)方法6:select*from#Tawhere(selectcount(1)from#TwhereName=a.NameandIDall(selectIDfrom#TwhereName=a.Name)方法9(注:ID为唯一时可用):selec
6、t*from#TawhereIDin(selectmin(ID)from#TgroupbyName)--SQL2005:方法10:selectID,Name,Memofrom(select*,min(ID)over(partitionbyName)asMinIDfrom#Ta)TwhereID=MinID方法11:selectID,Name,Memofrom(select*,row_number()over(partitionbyNameorderbyID)asMinIDfrom#Ta)TwhereMinID=1生成结果:/*IDNameMemo----
7、---------------1AA14BB1(2行受影响)*/--II、Name相同ID最大的记录,与min相反:方法1:Select*from#Tawherenotexists(select1from#TwhereName=a.NameandID>a.ID)方法2:selecta.*from#Tajoin(selectmax(ID)ID,Namefrom#TgroupbyName)bona.Name=b.Nameanda.ID=b.IDorderbyID方法3:select*from#TawhereID=(selectmax(ID)from#Twhe
8、reName=a.Name)orderbyID方法4:selecta.*from
此文档下载收益归作者所有