ホームページ >データベース >mysql チュートリアル >Oracle SQLは複数の行を単一の行に集約できますか?
Oracle SQL: 複数のデータ行を 1 つの行にマージします
質問:
Oracle SQL は、テーブル内の複数行のデータを 1 行にマージできますか?
手順:
次の構造を持つテーブルがあるとします:
<code>A 1 A 2 B 1 B 2</code>
目標は、次の結果セットを取得することです:
<code>A 1 2 B 1 2</code>
解決策:
使用している Oracle SQL のバージョンに応じて、次の方法を使用できます:
1. wm_concat() 関数 (Oracle 12c 以前):
<code class="language-sql">SELECT field1, wm_concat(field2) FROM YourTable GROUP BY field1;</code>
(注: wm_concat() 関数は Oracle 12c では非推奨になりました。代わりに LISTAGG を使用することをお勧めします。)
2. カスタム文字列の集計:
wm_concat() 関数が使用できない場合は、文字列の集計を行うカスタム メソッドを実装できます。詳細な手順については、oracle-base.com を参照してください。
3. LISTAGG 関数を使用します (Oracle 11gR2 以降):
これは、より堅牢であり、新しい Oracle バージョンでサポートされているため、推奨される最新のアプローチです。
<code class="language-sql">SELECT field1, LISTAGG(field2, ' ') WITHIN GROUP (ORDER BY field2) AS aggregated_field2 FROM YourTable GROUP BY field1;</code>
このクエリは、LISTAGG
関数を使用して field2
の値を文字列に連結し、区切り文字としてスペースを使用し、field2
の値で並べ替えます。 WITHIN GROUP (ORDER BY field2)
句は、結果の文字列内の値の順序を保証します。 GROUP BY field1
句は field1
の値に従ってグループ化され、それによって複数の行が 1 つの行にマージされます。
Oracle のバージョンに最も適したソリューションを選択してください。 Oracle 11gR2 以降では、LISTAGG
関数を使用することを強くお勧めします。
以上がOracle SQLは複数の行を単一の行に集約できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。