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 進行查詢后,對查詢結果亂碼問題進行轉碼處理;
運行后的結果: