1. 程式人生 > >oracle 如何將多行資料進行合併(用LISTAGG!!!)

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