3 回答
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;
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来处理此问题。
- 3 回答
- 0 关注
- 956 浏览
添加回答
举报