ホームページ >データベース >mysql チュートリアル >Oracle で複数の行をカンマ区切りリストに結合するにはどうすればよいですか?
Oracle での行のカンマ区切りリストへの集約
Oracle は、複数の行をカンマ区切りの値を持つ 1 つの文字列に統合する関数をいくつか提供しています。 これは、データ集計とレポート生成の一般的なタスクです。 最も有名な関数は WM_CONCAT
と LISTAGG
です。
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_CONCAT
と LISTAGG
は、Oracle で複数の行をカンマ区切りのリストに集約するための堅牢かつ多用途の方法を提供します。 これらの関数はデータ操作を合理化し、SQL クエリの明確さを向上させます。
以上がOracle で複数の行をカンマ区切りリストに結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。