プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

Oracle LISTAGG関数

カラムの値を連結する時にはLISTAGG関数を使う
 
 
例として下記テーブルを準備

SQL> select * from employee;

 ID NAME       ADMIN_FLAG
--- ---------- ----------
  1 ryotsu     0
  2 nakagawa   1
  3 akimoto    1

SQL> select * from manager;

 ID ADMIN_FLAG CLASS_NAME
--- ---------- --------------------
  1 0          一般
  2 1          管理

 
 

■基本構文

listagg(カラム名, '区切り文字') within group (order by ソートしたいカラム名 ※無ければnull)

 

【使用例】

「CLASS_NAME」でグループ分けをして「NAME」をスラッシュで連結する場合

SQL> select
  2    m.class_name
  3    , listagg(e.name, '/') within group (order by e.name) as concat
  4  from
  5    employee e join manager m
  6      on e.admin_flag = m.admin_flag
  7  group by
  8    m.class_name;

CLASS_NAME           CONCAT
-------------------- ------------------------------
一般                 ryotsu
管理                 akimoto/nakagawa