Oracle查询数据,其中指定字段重复的只取其中一条

今天学了一句sql和大家分享一下: 
oracle数据库,情景:表(客户-业务员)中数据都不完全重复,但是可能多条数据其中某些字段重复。我想要取得表中符合条件的记录,但是这些记录中的客户id和客户名称发生重复的话只能留一个。

如图

如上图我想找出“冯冬梅”负责的所有客户,但是由于她属于多个部门,此表存储的是不同部门-不同人员对应的不同客户,所以会有重复数据,那么我想去除重复得到完整的记录,应该怎么办? 
自己尝试了distinct,可是distinct只能晒出重复字段,整条记录就没有办法;使用group by也没有实现,多方查找,sql贡献如下:

select s.* from 
(select t.*,row_number() over (partition by customid order by customid) as group_idx 
from base_custom_to_saler t where t.salername like ‘%冯冬梅%’ and t.entryid = 9) s 
where s.group_idx = 1

row_number()..over(partition by ..order by…) 其逻辑就是对符合某些特点的字段进行分组,排序,然后再取数据 
结果如下图: 

这里写图片描述

谢谢博主,参考上面,我写成自己需要的sql语句:

select id 岗位id
,code,name as 岗位code,org_id 机构id,org_name 机构名称,area 区域, 
names 人员姓名,login_id 工号,
client_id 客户id,client_code 客户代码,client_name 客户名称,post_id 岗位id,
post_name 岗位名称,bank_name 银行名称,
bank_detail_name 开户行,account 银行账号,account_name 银行账号名称,payment_method 支付方式,
group_idx
 from 
(select r.id,r.code,r.name,r.org_id,r.org_name,r.area, 
u.name as names,u.login_id,
i.client_id,i.client_code,i.client_name,i.post_id,
i.post_name,i.bank_name,
i.bank_detail_name,i.account,i.account_name,i.payment_method,
row_number() over (partition by account order by account) as group_idx 
from sec_role r,sec_user u,sec_user_role ur ,sys_payment_info i
where ur.user_id = u.id and ur.role_id = r.id and i.post_id = r.id and ur.begin_date is null
) where group_idx = 1
 

你可能感兴趣的:(oracle)