亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在不創建存儲過程的情況下,如何在Oracle中將多行串聯在一起?

在不創建存儲過程的情況下,如何在Oracle中將多行串聯在一起?

波斯汪 2019-11-30 13:36:38
如何在不創建存儲過程的情況下在oracle中實現以下目標?資料集:question_id    element_id1              71              82              93              103              113              12所需結果:question_id    element_id1              7,82              93              10,11,12
查看完整描述

3 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

有很多方法可以進行字符串聚合,但是最簡單的方法是用戶定義函數。 嘗試使用不需要功能的方法。 注意,沒有該功能沒有簡單的方法。


這是沒有自定義函數的最短路由:(它使用ROW_NUMBER()和SYS_CONNECT_BY_PATH函數)


SELECT questionid,

       LTRIM(MAX(SYS_CONNECT_BY_PATH(elementid,','))

       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS elements

FROM   (SELECT questionid,

               elementid,

               ROW_NUMBER() OVER (PARTITION BY questionid ORDER BY elementid) AS curr,

               ROW_NUMBER() OVER (PARTITION BY questionid ORDER BY elementid) -1 AS prev

        FROM   emp)

GROUP BY questionid

CONNECT BY prev = PRIOR curr AND questionid = PRIOR questionid

START WITH curr = 1;


查看完整回答
反對 回復 2019-11-30
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

在Oracle 11gR2中,LISTAGG子句可以解決問題:


SELECT question_id,

       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)

FROM YOUR_TABLE

GROUP BY question_id;

當心結果字符串是否太大(例如,對于VARCHAR2,超過4000個字符):從版本12cR2開始,我們可以使用ON OVERFLOW TRUNCATE / ERROR來處理此問題。


查看完整回答
反對 回復 2019-11-30
  • 3 回答
  • 0 關注
  • 991 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號