0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLのLISTAGGについて

Last updated at Posted at 2019-02-19

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を使う状況というと複数行の複数の値を連結したいケースが多いと思われるので参考までに。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?