作業中因為要清理資料,資料質量很差,存在這樣的情況客戶表temp_cust_info ,存在這樣的情況
欄位 如下:
客戶號 手機號 辦公電話 家庭地址 單位地址
130102556 12345 北京A
130102556 A12345 789013 北京A 北京B
存在這樣情況,相當于兩條資料,屬于資料質量不好,需要治理,如何得到一條記錄
客戶號 手機號 辦公電話 家庭地址 單位地址
130102556 12345|A12345 789013 北京A 北京B
如果要寫存盤程序,也請不吝賜教,或者寫個函式
uj5u.com熱心網友回復:
資料治理大部分情況下很難單純以技術手段來解決,也不建議以技術手段來解決,建議查詢出客戶號不唯一的資料清單,找相應業務人員進行確認uj5u.com熱心網友回復:
SELECT 客戶號,WMSYS.WM_CONCAT(DISTINCT 手機號) 手機號,
WMSYS.WM_CONCAT(DISTINCT 辦公電話) 辦公電話,
WMSYS.WM_CONCAT(DISTINCT 家庭地址) 家庭地址,
WMSYS.WM_CONCAT(DISTINCT 單位地址) 單位地址
FROM TEMP_CUST_INFO T
GROUP BY 客戶號

分隔符自己那邊處理下就行
uj5u.com熱心網友回復:
WMSYS.WM_CONCAT 受教了,我看還有種方法,目前在用這種方法,今天準備嘗試下,然后比較下和你這種方法的效率,select 客戶號 ,
regexp_replace(listagg(手機號,‘,’) within group(order by 客戶號),‘([^,]+','\1') as 手機號,
regexp_replace(listagg(家庭地址,‘,’) within group(order by 客戶號),‘([^,]+','\1') as 家庭地址,
regexp_replace(listagg(單位地址,‘,’) within group(order by 客戶號),‘([^,]+','\1') as 單位地址 from TEMP_CUST_INFO
group 客戶號;
但感覺比你的要復雜,不知道哪種好,我得比較一下,謝謝指教
uj5u.com熱心網友回復:
wmsys.wm_concat的效率比listagg within group 要低一些 這個根據使用場景來看, wmsys回傳是clob,所以支持長字符, listagg回傳只能是varchar2(4000),如果長度不超過就用listagg,如果長度超了,使用wmsys,個人建議轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/14667.html
標籤:高級技術
上一篇:批量將b表的查詢結果user_name一一對應更新到a表對應的name欄位,a表的id欄位和b表的id_number欄位內容相同
