ホームページ >データベース >mysql チュートリアル >ストアド プロシージャを使用せずに Oracle で複数の行を 1 つの行に連結するにはどうすればよいですか?

ストアド プロシージャを使用せずに Oracle で複数の行を 1 つの行に連結するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-05 15:27:40315ブラウズ

How to Concatenate Multiple Rows into a Single Row in Oracle Without Stored Procedures?

ストアド プロシージャを使用せずに Oracle で複数の行を 1 つの行に連結する

当面の問題は、複数の行を 1 つの行に連結する Oracle のメソッドを探すことです。ストアド プロシージャに頼らない方法です。指定されたデータ セットは、重複する question_id 値を持つ question_id 列と element_id 列で構成されます。望ましい結果は、同じ question_id に関連付けられた element_id 値を 1 つの行にマージすることです。

これは、Oracle 11gR2 で導入された LISTAGG 句を使用して実現できます。構文は次のとおりです。

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;

この句は、各 question_id の element_id 値を、指定された区切り文字 (この場合はカンマ) で区切って連結します。 WITHIN GROUP 句により、連結前に値が確実に順序付けされることに注意してください。

Oracle バージョン 12cR2 以降の場合、ON OVERFLOW TRUNCATE/ERROR 句を使用して、文字列長制限に関する潜在的な問題を処理できます。

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
       ON OVERFLOW TRUNCATE
FROM YOUR_TABLE
GROUP BY question_id;

または

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
       ON OVERFLOW ERROR
FROM YOUR_TABLE
GROUP BY question_id;

を固着することで構文を変更し、適切なオプションを使用すると、開発者は Oracle でストアド プロシージャを作成せずに、複数の行を 1 つの行に連結できます。

以上がストアド プロシージャを使用せずに Oracle で複数の行を 1 つの行に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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