首頁 > 資料庫 > mysql教程 > Oracle SQL 可以將多行聚合為一行嗎?

Oracle SQL 可以將多行聚合為一行嗎?

Patricia Arquette
發布: 2025-01-15 18:47:47
原創
887 人瀏覽過

Can Oracle SQL Aggregate Multiple Rows into a Single Row?

Oracle SQL:將多行資料合併成一行

問題:

Oracle SQL 能否將表中多行資料合併成一行?

說明:

假設有一個表,結構如下:

<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 的值進行分組,從而實現多行合併成一行。

選擇最適合您Oracle版本的解決方案。 對於Oracle 11gR2以上版本,強烈建議使用 LISTAGG 函數。

以上是Oracle SQL 可以將多行聚合為一行嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板