3 回答

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
有很多方法可以進(jìn)行字符串聚合,但是最簡單的方法是用戶定義函數(shù)。 嘗試使用不需要功能的方法。 注意,沒有該功能沒有簡單的方法。
這是沒有自定義函數(shù)的最短路由:(它使用ROW_NUMBER()和SYS_CONNECT_BY_PATH函數(shù))
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;

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
在Oracle 11gR2中,LISTAGG子句可以解決問題:
SELECT question_id,
LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;
當(dāng)心結(jié)果字符串是否太大(例如,對于VARCHAR2,超過4000個(gè)字符):從版本12cR2開始,我們可以使用ON OVERFLOW TRUNCATE / ERROR來處理此問題。
- 3 回答
- 0 關(guān)注
- 988 瀏覽
添加回答
舉報(bào)