首頁 > 資料庫 > mysql教程 > 如何在沒有預存程序的 Oracle 中將多行連接成一行?

如何在沒有預存程序的 Oracle 中將多行連接成一行?

Patricia Arquette
發布: 2025-01-05 15:27:40
原創
301 人瀏覽過

How to Concatenate Multiple Rows into a Single Row in Oracle Without Stored Procedures?

在沒有預存程序的Oracle 中將多行連接成一行

當前的問題尋求一種在Oracle 中將多行連接成一行的方法一種無需求助於預存程序的方法。給定的資料集由具有重複 Question_id 值的 Question_id 和 element_id 列組成。期望的結果是將與相同 Question_id 關聯的 element_id 值合併到一行中。

可以使用 Oracle 11gR2 中引入的 LISTAGG 子句來實現此目的。語法如下:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;
登入後複製

此子句連接每個 Question_id 的 element_id 值,並以指定的分隔符號(本例為逗號)分隔。請注意,WITHIN GROUP 子句可確保在串聯之前對值進行排序。

對於Oracle 版本12cR2 及更高版本,ON OVERFLOW TRUNCATE/ERROR 子句可用於處理字串長度限制的潛在問題:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
       ON OVERFLOW TRUNCATE
FROM YOUR_TABLE
GROUP BY question_id;
登入後複製

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
       ON OVERFLOW ERROR
FROM YOUR_TABLE
GROUP BY question_id;
登入後複製

透過遵守語法並使用透過適當的選項,開發人員可以將多行連接成一行,而無需在Oracle 中建立預存程序。

以上是如何在沒有預存程序的 Oracle 中將多行連接成一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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