LISTAGGにお世話になったのですが、使えるようになるまで少し手間取ったのでおさらい。
LISTAGGとは、複数行を単一列に連結するための集計関数です。
構文は以下。
LISTAGG(【カラム名】, '【区切り文字】') WITHIN GROUP (ORDER BY 【カラム名】) AS 【別名】
SQL文の中では次のように使用します。
SELECT
LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY CD) AS NAME
FROM
T_NAME
GROUP BYを使用したい場合は次のように。
SELECT
KBN
,LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY CD) AS NAME
FROM
T_NAME
GROUP BY
KBN
GROUP BYとORDER BYをどう設定するかで引っかかって見事に詰みました。
冷静になって考えてみると単純なんですが……。
ちなみに以下は実際に使用したものに近いSQL。より実用的かも。
SELECT
KBN
,LISTAGG(NAME || '(' || CD || ')', '、') WITHIN GROUP (ORDER BY CD) AS NAME
FROM
T_NAME
GROUP BY
KBN
カラム名のところを文字連結しただけですが、わざわざLISTAGGを使う状況というと複数行の複数の値を連結したいケースが多いと思われるので参考までに。