oracle 如何將多行資料進行合併(用LISTAGG!!!)
LISTAGG(列名,' 分割符號')
oracle 11g 以上的版本才有的一個將指定列名的多行查詢結果,用 指定的分割符號 合併成一行顯示:
例如:
表原始資料:
需求:將 mb1_Transport_License_list 表中的資料,根據 transportation_license_id 資料進行分組,對 Item_Category_Name 列的資料進行 去重合並
使用聚合函式 LISTAGG 解決
SELECT transportation_license_id, LISTAGG( to_char(Item_Category_Name), ',') WITHIN GROUP(ORDER BY Item_Category_Name) AS employees FROM ( select distinct transportation_license_id, item_category_name from mb1_Transport_License_list ) group by transportation_license_id
SQL解析:
select distinct transportation_license_id, item_category_name from mb1_Transport_Lincense_list ; -- 對需要做合併處理的資料來源資料進行去重處理,如果實際要求不需要去重處理,這裡可以直接改為 表名,(例如: from mb1_Transport_Lincense_list)進行查詢
LISTAGG( to_char(Item_Category_Name), ',') WITHIN GROUP(ORDER BY Item_Category_Name) -- 將 Item_Category_Name 列的內容以", "進行分割合併、排序;
to_char(Item_Category_Name) -- to_char(列名) 解決使用聚合函式 LISTAGG 進行查詢後,對查詢結果亂碼問題進行轉碼處理;
執行後的結果:
原文:https://blog.csdn.net/sinat_35626559/article/details/7262169