Oracle: Group 化 の際に文字列を結合する


Group 化 する際に 文字列を カンマ区切りで結合する方法を 2つ 紹介します。

ストアドファンクション

ストアドファンクション を使って文字列を結合します。

このようなファンクションを作っておいて、 次のような SQL を実行します。

出力結果サンプル
GROUP_ID MEMBER_NAMES
1 A, B, C
2 D, E

もし、 MEMBER_NAMES の出力結果が文字列として長くなりすぎる場合は、 文字数の長さを調べて分岐処理を行うように ファンクション を変更すれば OK です。 末尾に “等” をつけたりもできます。 区切り文字を変更することもできます。

ファンクション内で使われている LTRAM(PARAM1, PARAM2) は、 PARAM1 の左端に、 PARAM2 があれば削除する関数です。 右側を削除する場合は RTRAM が使えます。

wm_concat

wm_concat という関数を使っても同じことができます。 Oracle(オラクル) のマニュアルにも載っていない関数なので、 オラクルのサポートは受けられないと思います。

上の SQL を実行すると、 AAAAA, BBBBB, CCCCC, DDDDD というような結果が出力されます。

データと期待する出力結果をわかりやすくテーブルの形にして書くと、下のようになります。

データ
ENAMEJOB
AAAAAA
BBBBBA
CCCCCA
DDDDDA
期待する出力
wm_concat(ENAME)
AAAAA, BBBBB, CCCCC, DDDDD

同等の機能をもつ ListAgg 関数 が Oracle 11g R2 で 正式にサポートされました。

参考: Oracleの階層問い合わせ