Oracle で複数の行を 1 つの行に連結する
ストアド プロシージャを使用せずに Oracle で複数の行を 1 つの行に連結するには、Oracleユーザーは LISTAGG 句を使用できます。この句を使用すると、指定された区切り文字に基づいて効率的に行を統合できます。
データ シナリオ:
次のデータを考慮します:
question_id element_id 1 7 1 8 2 9 3 10 3 11 3 12
望ましい出力:
望ましい結果は、各 question_id の element_id 値を連結し、次のようになります。
question_id element_id 1 7,8 2 9 3 10,11,12
LISTAGG による解決策:
Oracle 11gR2 以降では、LISTAGG 句を使用できます。この連結を実現するには:
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) FROM YOUR_TABLE GROUP BY question_id;
このクエリLISTAGG 関数を使用して、question_id で定義された各グループ内の element_id 値を連結します。 ORDER BY 句を使用すると、連結前に各グループ内で値が順序付けされるようになります。
オーバーフローの処理:
結果の連結文字列が、その文字列に許可されている最大長を超える場合は注意してください。データ型 (VARCHAR2 の場合は 4000 文字など)、Oracle バージョン 12cR2 以降では、処理するオプションが提供されます。 overflow.
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) OVERFLOW TRUNCATE/ERROR FROM YOUR_TABLE GROUP BY question_id;
このクエリは、結果が最大長を超えた場合に切り詰めるか、エラーを発生させる ON OVERFLOW TRUNCATE/ERROR 句を指定します。
以上がLISTAGGを使用してOracleで複数の行を単一の行に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。