ホームページ >データベース >mysql チュートリアル >Oracle で複数の行をカンマ区切りリストに結合するにはどうすればよいですか?

Oracle で複数の行をカンマ区切りリストに結合するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-19 17:51:10851ブラウズ

How to Combine Multiple Rows into a Comma-Delimited List in Oracle?

Oracle での行のカンマ区切りリストへの集約

Oracle は、複数の行をカンマ区切りの値を持つ 1 つの文字列に統合する関数をいくつか提供しています。 これは、データ集計とレポート生成の一般的なタスクです。 最も有名な関数は WM_CONCATLISTAGG です。

WM_CONCAT

の使用

11.2 より前の Oracle バージョンで使用可能な WM_CONCAT は、指定された区切り文字を使用して複数の行の値を連結します。 たとえば、スキーマ内のテーブル名のカンマ区切りリストを生成するには:

<code class="language-sql">SELECT WM_CONCAT(table_name)
FROM user_tables;</code>

雇用LISTAGG

Oracle 11.2 で導入された LISTAGG は、WM_CONCAT よりも強化された機能を提供します。 これにより、区切り文字の指定や NULL 値の処理など、より詳細な制御が可能になります。 次の例では、NULL エントリを省略して、テーブル名のカンマ区切りリストを作成します。

<code class="language-sql">SELECT LISTAGG(table_name, ', ') WITHIN GROUP (ORDER BY table_name)
FROM user_tables;</code>

実際の応用

各個人の複数の市民権記録を取得するクエリを想像してください。冗長なエントリを避けるために、LISTAGG をサブクエリとして使用して、1 人あたり単一のカンマ区切りの市民権リストを生成できます。

<code class="language-sql">SELECT person_id,
       (SELECT LISTAGG(citizenship, ', ') WITHIN GROUP (ORDER BY citizenship)
        FROM citizenship
        WHERE person_id = t.person_id) AS citizenship_list
FROM person t;</code>

これにより、個人ごとに 1 行が返され、citizenship_list 列には市民権のカンマ区切り文字列が含まれます。

概要

WM_CONCATLISTAGG は、Oracle で複数の行をカンマ区切りのリストに集約するための堅牢かつ多用途の方法を提供します。 これらの関数はデータ操作を合理化し、SQL クエリの明確さを向上させます。

以上がOracle で複数の行をカンマ区切りリストに結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。