ホームページ > データベース > mysql チュートリアル > Oracle SQLは複数の行を単一の行に集約できますか?

Oracle SQLは複数の行を単一の行に集約できますか?

Patricia Arquette
リリース: 2025-01-15 18:47:47
オリジナル
885 人が閲覧しました

Can Oracle SQL Aggregate Multiple Rows into a Single Row?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート