用SQL语句去掉重复的记录
上一篇 /
下一篇 2011-07-22 10:33:03
/ 个人分类:SQL
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
D5_[3Y0D cht,ff0 1、对于第一种重复,比较容易解决,使用
6~_&v'c"o(^
R0J0 select distinct * from tableName
ITPUB个人空间
A6c
A!H8sp-}
hj 就可以得到无重复记录的结果集。
ITPUB个人空间5]|-@+\0E-A3B.n!y 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
ITPUB个人空间yaU*q-U? select distinct * into #Tmp from tableName
ITPUB个人空间{i:s R(a
b drop table tableName
ITPUB个人空间%qc0Q M#gM/]Nc select * into tableName from #Tmp
Bw2p&f*rb%Z+A0 drop table #Tmp
ITPUB个人空间nB5_Wh^&? 发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
-Zq(RrF0 &G]*lX1a`R0 2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
4AV:EC N0 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
ITPUB个人空间@@+VT#rw$e select identity(int,1,1) as autoID, * into #Tmp from tableName
Ax$P f1JI }5os0 select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,Address
ITPUB个人空间0M;n$KN
aA select * from #Tmp where autoID in(select autoID from #tmp2)
ITPUB个人空间e0?JZ@ fz/pG 最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
P'S(bHY%E0or
9\p3uH;T5F8IS2XQ){0With Dups as
0vB
HqqZD\
W0(
0?'hn.|q}m
c0 select *, row_number() over (partition by Product_Code order by Product_Code) as RowNum
6G'DXo`Bcg0 from #prod
%rU/?)OrWLkF0)
ITPUB个人空间5G'\*Ian~2`J+ZK]@xb0}
tlQog hQ j0Delete from Dups where rownum > 1;
'B6DWL5Q0
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: