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中文網其他相關文章!