oracle过滤某个字段重复记录,只获取一条记录 | 您所在的位置:网站首页 › oracle去除重复数据中的一条记录 › oracle过滤某个字段重复记录,只获取一条记录 |
一,首先想到: 1,关键字distinct 2,group by 3,MAX,MIN这样的函数被称为聚集函数,和GROUP搭配起来用 但均无法实现,执行结果如下 举例: 表名:OffsiteOutreachTeam_List 字段:CORPADDLEVEL(获取该字段不重复数据),CHANNELCODE, CORPNAME, BELONGORGNAME 执行结果: 1,distinct --一个字段有效,多个字段无效 select distinct CORPADDLEVEL from OffsiteOutreachTeam_List; select distinct CORPADDLEVEL ,CHANNELCODE, CORPNAME, BELONGORGNAME from OffsiteOutreachTeam_List; 注意:当除了过滤字段外的其他所有字段内容相同时,才可以起到过滤效果。 2,group by --只能查询一个字段 select CORPADDLEVEL from OffsiteOutreachTeam_List group by CORPADDLEVEL; --报错 not a group by expression select CORPADDLEVEL,CHANNELCODE, CORPNAME, BELONGORGNAME from OffsiteOutreachTeam_List group by CORPADDLEVEL; 3,MAX,MIN这样的函数被称为聚集函数,和GROUP搭配起来用 --只能过滤两个字段 SELECT MIN(CHANNELCODE), CORPADDLEVEL FROM OffsiteOutreachTeam_List GROUP BY CORPADDLEVEL --报错 not a group by expression SELECT MIN(CHANNELCODE), CORPADDLEVEL,CORPNAME, BELONGORGNAME FROM OffsiteOutreachTeam_List GROUP BY CORPADDLEVEL 二,正确方式 1,关键字 row_number() OVER(PARTITION BY 使用子查询对重复数据按照123...排序,再条件需要为1的。 select CORPADDLEVEL ,CHANNELCODE, CORPNAME, BELONGORGNAME from(select ol.CORPADDLEVEL,ol.CHANNELCODE, ol.CORPNAME, ol.BELONGORGNAME, row_number() OVER(PARTITION BY ol.CORPADDLEVEL ORDER BY ol.CORPADDLEVEL) ds from OffsiteOutreachTeam_List olwhere ol.CORPADDLEVEL is not null)where ds = 1 2,使用min group by进行子查询,获取唯一字段,再查询所有字段。select CORPADDLEVEL ,CHANNELCODE, CORPNAME, BELONGORGNAME from OffsiteOutreachTeam_List where CHANNELCODE in(select min(CHANNELCODE) from OffsiteOutreachTeam_List group by CORPADDLEVEL) order by CORPADDLEVEL;
|
CopyRight 2018-2019 实验室设备网 版权所有 |