日期:2014-05-17  浏览次数:21207 次

如何只根据一个字段筛选出重复数据?
比如
XM  ,XB ,ZJHM
张三  男   112233
张三  男   112244
李四  男   112233

需要写SQL把重复的删除,比如筛选完是
张三  男   112233
张三  男   112244
不用管 是张三还是李四那条,只要去掉一个或者多个重复的即可
用distinct 只能是所有字段都匹配才行,还有什么好办法呢?

------解决方案--------------------
是要去掉ZJHM这列的值重复的数据吗?
------解决方案--------------------
select zjhm from table group by zjhm having count(zjhm)>1
------解决方案--------------------
你是呀删除重复列还是找出重复列。找出按楼上的来,稍微改下就可以用。删除是
 delete t where t.rowid not in (select min(rowid) from t group by XM  ,XB ,ZJHM)
------解决方案--------------------

WITH test AS
(SELECT'张三' xm  ,'男'  xb,  '112233' ZJHM FROM dual UNION ALL
SELECT '张三' , '男'  , '112244' FROM dual UNION ALL
SELECT '李四' , '男' ,  '112233' FROM dual )
SELECT * FROM test t WHERE ROWNUM=(SELECT MAX(ROWNUM) FROM test k WHERE k.zjhm=t.zjhm) 

------解决方案--------------------
方法很多啊,分析函数也可以

select XM, XB, ZJHM
  from (select t.*, row_number() over(partition by zjhm order by rownum) rn
          from t)
 where rn = 1