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
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章