ホームページ >データベース >mysql チュートリアル >ストアド プロシージャを使用せずに Oracle で複数の行を 1 つの行に連結するにはどうすればよいですか?
ストアド プロシージャを使用せずに 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 サイトの他の関連記事を参照してください。