为了账号安全,请及时绑定邮箱和手机立即绑定

在不创建存储过程的情况下,如何在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 关注
  • 899 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信