DB2: カンマ区切りのグループ値を生成
この記事では、グループ内の列値を連結し、カンマで区切ることができる組み込み関数が DB2 SQL にあるかどうかを検討します。この関数の必要性は、複数の行が同じグループ識別子 (例では ID) を共有しているが、他の列が異なる値 (ロールなど) を持っている状況で発生します。望ましい出力は、各グループに関連付けられた値をカンマ区切りのリストに連結することです。
解決策: LISTAGG 関数を使用します
DB2 LUW 9.7 では、各グループ内の指定された列の値をユーザー定義の区切り文字で区切って連結できる LISTAGG 関数が導入されました。この関数を使用すると、目的のカンマ区切り出力を実現できます。
例:
id 列と category 列を含む次の myTable について考えてみましょう:
<code class="language-sql">create table myTable (id int, category int); insert into myTable values (1, 1); insert into myTable values (2, 2); insert into myTable values (5, 1); insert into myTable values (3, 1); insert into myTable values (4, 2);</code>
各カテゴリ グループの ID 値のカンマ区切りリストを生成するには、次のクエリを使用できます:
<code class="language-sql">select category, LISTAGG(id, ', ') as ids from myTable group by category;</code>
このクエリは次の出力を生成します:
<code>CATEGORY IDS --------- ----- 1 1, 5, 3 2 2, 4</code>
追加機能:
LISTAGG 関数を使用すると、各グループ内の接続された値の順序をさらに制御できます。 LISTAGG 関数で ORDER BY 句を指定することで、結合する前に値の並べ替え順序を制御できます。
たとえば、次のクエリは、各カテゴリ グループの ID 値を昇順で並べ替えます:
<code class="language-sql">select category, LISTAGG(id, ', ') WITHIN GROUP(ORDER BY id ASC) as ids from myTable group by category;</code>
これにより、次の出力が生成されます:
<code>CATEGORY IDS --------- ----- 1 1, 3, 5 2 2, 4</code>
以上がDB2 グループの列値をカンマ区切り文字で連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。