LISTAGG 去重處理


ORACLE 11gr 以上WM_CONCAT失效,無奈使用函數 listagg

select listagg(NAME) WITHIN GROUP (ORDER BY NAME) from ENTITY;

然后發現查詢的結果, 沒有去重,本以為可以簡單的用DISTINCT來解決, 沒想到, listagg 不支持該關鍵字。

查了許久資料,從stackoverflow發現可以用正則來處理去重,於是嘗試使用

select regexp_replace(listagg(NAME) WITHIN GROUP (ORDER BY NAME),'([^,]+)(,\1)*(,|$)', '\1\3') from ENTITY;

測試得到的結果的確是進行了去重處理。

但是,這個去重,必須建立在排序的基礎上,如果listagg拼接出來的數值像

a, b, a, c

這時候,該正則就會失效。

參考鏈接

https://stackoverflow.com/questions/11510870/listagg-in-oracle-to-return-distinct-values/11511203#11511203


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM