在不创建存储过程的情况下,如何在oracle中实现以下功能?

数据集:

question_id    element_id
1              7
1              8
2              9
3              10
3              11
3              12

预期结果:

question_id    element_id
1              7,8
2              9
3              10,11,12

推荐答案

有很多方法可以进行字符串聚合,但最简单的是用户定义的函数.Try this for a way that does not require a function.作为一个注释,没有这个功能就没有简单的方法.

这是没有自定义函数的最短路径:(它使用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;

Sql相关问答推荐

如何创建具有部分可空列的两个表的联合

带有双引号的json在Presto中是否有区别对待?

在Golang中管理数据库事务的简洁方法

snowflake/SQL嵌套的JSON对象和数组

对表进行多项 Select 以返回最大值和时间

如何找到一个组合的两个列,这是不是在其他表在ORACLE SQL?

Oracle PL/SQL:解决DBMS输出大小限制的问题

使用CTE在SNOWFLAKE中创建临时表

在 PostgreSQL 中生成时间序列查询

按二维数组的第一个元素排序

如何在android房间中进行多个加入

在 SQL Server 中合并两个 XML 列

如何用SQL组合客户拥有的产品

SQL 如何根据当前事件和下一个事件确定操作的持续时间?

如何对 jsonb 中的字段执行求和,然后使用结果过滤查询的输出

如何通过CROSS APPLY获取多级嵌套JSON属性的值?

使用 GROUP BY 时如何创建其他组?

连续期间的缺口

SQL Server 查找存在于所有不同时期(或序列)中的条目

并非所有变量都绑定在 PL SQL 函数中