在沒有預存程序的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中文網其他相關文章!