亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

sql分組后二次匯總(處理表重復記錄查詢和刪除)的實現方法

2024-08-31 01:04:39
字體:
來源:轉載
供稿:網友

--處理表重復記錄(查詢和刪除)
/******************************************************************************************************************************************************
1、Num、Name相同的重復值記錄,沒有大小關系只保留一條
2、Name相同,ID有大小關系時,保留大或小其中一個記錄
整理人:中國風(Roy)

日期:2008.06.06
******************************************************************************************************************************************************/

--1、用于查詢重復處理記錄(如果列沒有大小關系時2000用生成自增列和臨時表處理,SQL2005用row_number函數處理)

--> --> (Roy)生成測試數據
 

if not object_id('Tempdb..#T') is null drop table #TGoCreate table #T([ID] int,[Name] nvarchar(1),[Memo] nvarchar(2))Insert #Tselect 1,N'A',N'A1' union allselect 2,N'A',N'A2' union allselect 3,N'A',N'A3' union allselect 4,N'B',N'B1' union allselect 5,N'B',N'B2'Go


--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<a.ID)

方法2:
select a.* from #T a join (select min(ID)ID,Name from #T group by Name) b on a.Name=b.Name and a.ID=b.ID

方法3:
select * from #T a where ID=(select min(ID) from #T where Name=a.Name)

方法4:
select a.* from #T a join #T b on a.Name=b.Name and a.ID>=b.ID group by a.ID,a.Name,a.Memo having count(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 ID<a.ID)=0

方法7:
select * from #T a where ID=(select top 1 ID from #T where Name=a.name order by ID)

方法8:
select * from #T a where ID!>all(select ID from #T where Name=a.Name)

方法9(注:ID為唯一時可用):
select * from #T a where ID in(select min(ID) from #T group 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    A1
4           B    B1

(2 行受影響)
*/


--II、Name相同ID最大的記錄,與min相反:
方法1:
Select * from #T a where not exists(select 1 from #T where Name=a.Name and ID>a.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 Name=a.Name) order by ID

方法4:
select a.* from #T a join #T b on a.Name=b.Name and a.ID<=b.ID group by a.ID,a.Name,a.Memo having count(1)=1

方法5:
select * from #T a group by ID,Name,Memo having ID=(select max(ID)from #T where Name=a.Name)

方法6:
select * from #T a where (select count(1) from #T where Name=a.Name and ID>a.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!<all(select ID from #T where Name=a.Name)

方法9(注:ID為唯一時可用):
select * from #T a where ID in(select max(ID) from #T group by Name)

--SQL2005:

方法10:
select ID,Name,Memo from (select *,max(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 desc) as MinID from #T a)T where MinID=1

生成結果2:
/*
ID          Name Memo
----------- ---- ----
3           A    A3
5           B    B2

(2 行受影響)
*/

 

--2、刪除重復記錄有大小關系時,保留大或小其中一個記錄


--> --> (Roy)生成測試數據

if not object_id('Tempdb..#T') is null
    drop table #T
Go
Create table #T([ID] int,[Name] nvarchar(1),[Memo] nvarchar(2))
Insert #T
select 1,N'A',N'A1' union all
select 2,N'A',N'A2' union all
select 3,N'A',N'A3' union all
select 4,N'B',N'B1' union all
select 5,N'B',N'B2'
Go

--I、Name相同ID最小的記錄(推薦用1,2,3),保留最小一條
方法1:
delete a from #T a where  exists(select 1 from #T where Name=a.Name and ID<a.ID)

方法2:
delete a  from #T a left join (select min(ID)ID,Name from #T group by Name) b 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 min(ID) from #T where Name=a.Name)

方法4(注:ID為唯一時可用):
delete a from #T a where ID not in(select min(ID)from #T group by Name)

方法5:
delete a from #T a where (select count(1) from #T where Name=a.Name and ID<a.ID)>0

方法6:
delete a from #T a where ID<>(select top 1 ID from #T where Name=a.name order by ID)

方法7:
delete a from #T a where ID>any(select ID from #T where Name=a.Name)

 

select * from #T

生成結果:
/*
ID          Name Memo
----------- ---- ----
1           A    A1
4           B    B1

(2 行受影響)
*/


--II、Name相同ID保留最大的一條記錄:

方法1:
delete a from #T a where  exists(select 1 from #T where Name=a.Name and ID>a.ID)

方法2:
delete a  from #T a left join (select max(ID)ID,Name from #T group by Name) b 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 ID>a.ID)>0

方法6:
delete a from #T a where ID<>(select top 1 ID from #T where Name=a.name order by ID desc)

方法7:
delete a from #T a where ID<any(select ID from #T where Name=a.Name)


select * from #T
/*
ID          Name Memo
----------- ---- ----
3           A    A3
5           B    B2

(2 行受影響)
*/

 

 

--3、刪除重復記錄沒有大小關系時,處理重復值


--> --> (Roy)生成測試數據
 
if not object_id('Tempdb..#T') is null
    drop table #T
Go
Create table #T([Num] int,[Name] nvarchar(1))
Insert #T
select 1,N'A' union all
select 1,N'A' union all
select 1,N'A' union all
select 2,N'B' union all
select 2,N'B'
Go

方法1:
if object_id('Tempdb..#') is not null
    drop table #
Select distinct * into # from #T--排除重復記錄結果集生成臨時表#

truncate table #T--清空表

insert #T select * from #    --把臨時表#插入到表#T中

--查看結果
select * from #T

/*
Num         Name
----------- ----
1           A
2           B

(2 行受影響)
*/

--重新執行測試數據后用方法2
方法2:

alter table #T add ID int identity--新增標識列
go
delete a from  #T a where  exists(select 1 from #T where Num=a.Num and Name=a.Name and ID>a.ID)--只保留一條記錄
go
alter table #T drop column ID--刪除標識列

--查看結果
select * from #T

/*
Num         Name
----------- ----
1           A
2           B

(2 行受影響)

*/

--重新執行測試數據后用方法3
方法3:
declare Roy_Cursor cursor local for
select count(1)-1,Num,Name from #T group by Num,Name having count(1)>1
declare @con int,@Num int,@Name nvarchar(1)
open Roy_Cursor
fetch next from Roy_Cursor into @con,@Num,@Name
while @@Fetch_status=0
begin
    set rowcount @con;
    delete #T where Num=@Num and Name=@Name
    set rowcount 0;
    fetch next from Roy_Cursor into @con,@Num,@Name
end
close Roy_Cursor
deallocate Roy_Cursor

--查看結果
select * from #T
/*
Num         Name
----------- ----
1           A
2           B

(2 行受影響)


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人黄色在线观看| 久久久国产精品免费| 精品久久久香蕉免费精品视频| 欧美疯狂性受xxxxx另类| 中文一区二区视频| 亚洲成人久久久久| 九九热视频这里只有精品| 美女av一区二区| 国产精品久久久久久久久久新婚| 日韩成人av网| 亚洲精品久久久久久下一站| 久久精品99无色码中文字幕| 欧美国产视频一区二区| 最近2019中文免费高清视频观看www99| 97在线视频免费播放| 亚洲午夜精品视频| 91日韩在线视频| 日本国产欧美一区二区三区| 久久99亚洲精品| 欧美第一淫aaasss性| 日韩电影中文字幕av| 成人写真福利网| 亚洲九九九在线观看| 久久久久久91| 97视频在线播放| 欧美日韩美女在线| 欧美第一黄网免费网站| 欧美性xxxxxxxxx| 久久精品国产视频| 欧美亚洲视频一区二区| 久久精品国产免费观看| 亚州成人av在线| 精品视频—区二区三区免费| 国产免费一区视频观看免费| 欧美成aaa人片在线观看蜜臀| 韩国国内大量揄拍精品视频| 在线播放日韩精品| 精品国产欧美成人夜夜嗨| 2019国产精品自在线拍国产不卡| 精品国偷自产在线视频| 亚洲福利视频免费观看| 欧美性猛交xxxx乱大交| 亚洲人成网站免费播放| 久久电影一区二区| 日韩欧美在线中文字幕| 色老头一区二区三区| 91精品久久久久久久久久久久久| 国产精品一区电影| 国产色婷婷国产综合在线理论片a| 国产在线视频欧美| 亚洲成人免费网站| 欧美精品videos另类日本| 成人午夜小视频| 91久久精品日日躁夜夜躁国产| 亚洲男女自偷自拍图片另类| 尤物九九久久国产精品的分类| 亚洲欧美资源在线| 97视频国产在线| 尤物精品国产第一福利三区| 亚洲激情 国产| 日韩av成人在线观看| 国内精久久久久久久久久人| 日韩中文在线中文网在线观看| 久久久久久久一区二区| 亚洲精品美女久久| 欧日韩不卡在线视频| 91久久久久久久一区二区| 久久97久久97精品免视看| 久久精品国产96久久久香蕉| 欧美性色19p| 日韩av三级在线观看| 国产自摸综合网| 精品国产1区2区| 亚洲天堂av图片| 中日韩美女免费视频网址在线观看| 中文字幕日韩av电影| 欧美国产精品人人做人人爱| 久久在线视频在线| 欧美激情精品久久久久久免费印度| 亚洲欧洲中文天堂| 午夜精品久久久久久久白皮肤| 国产精品入口免费视| 欧美性xxxxxxxxx| 日韩高清中文字幕| 中文字幕v亚洲ⅴv天堂| 91麻豆国产语对白在线观看| 国产亚洲欧美aaaa| 久久亚洲私人国产精品va| 美女精品视频一区| 亚洲欧美日韩一区二区三区在线| 亚洲色图欧美制服丝袜另类第一页| 欧美一级片免费在线| 懂色av影视一区二区三区| 91av在线不卡| 亚洲国产日韩欧美在线99| 国产视频久久网| 国产suv精品一区二区三区88区| 欧美成人激情视频免费观看| 久久久久久av| 国产精品精品视频一区二区三区| 国产精品久久激情| 国产亚洲视频中文字幕视频| 亚洲国产精品女人久久久| 精品久久久视频| 欧美精品中文字幕一区| 久久免费视频观看| 亚洲美女av黄| 亚洲伊人成综合成人网| 国产精品xxxxx| 一夜七次郎国产精品亚洲| 91精品国产综合久久男男| 在线精品国产成人综合| 欧美疯狂xxxx大交乱88av| 久久久精品国产亚洲| 成人精品网站在线观看| 这里只有精品在线播放| 激情亚洲一区二区三区四区| 午夜精品福利在线观看| 8x海外华人永久免费日韩内陆视频| xxxxx91麻豆| 91极品女神在线| 国产精品旅馆在线| 欧美激情一区二区三级高清视频| 777午夜精品福利在线观看| 亚洲一区二区福利| 欧美午夜宅男影院在线观看| 色悠久久久久综合先锋影音下载| 性色av一区二区三区| 亚洲精品一区二区三区不| 亚洲第一天堂无码专区| 亚洲国产精品嫩草影院久久| 亚洲欧美在线第一页| 亚洲女性裸体视频| 最近2019免费中文字幕视频三| 深夜精品寂寞黄网站在线观看| 日本精品性网站在线观看| 2019亚洲日韩新视频| 美女福利视频一区| 亚洲天堂开心观看| 欧美日韩激情视频8区| 伊人久久久久久久久久| 日韩在线观看免费全集电视剧网站| 久久综合久久八八| 亚洲国产99精品国自产| 亚洲另类xxxx| 亚洲a级在线播放观看| 亚洲欧美中文在线视频| 久久久久久久av| 久久伊人免费视频| 欧美日韩国产123| 成人久久18免费网站图片| 日韩欧美黄色动漫| 三级精品视频久久久久| 久久不射电影网| 热久久这里只有| 欧美激情一区二区三区久久久| 亚洲欧洲自拍偷拍| 亚洲欧洲美洲在线综合| 日韩va亚洲va欧洲va国产| 国产精品7m视频| 国产一区二区三区日韩欧美| 欧美国产日韩二区| 欧美有码在线观看| 国产成人鲁鲁免费视频a|