【发布时间】:2013-07-24 14:17:35
【问题描述】:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production。
我有一个如下格式的表格。
Number User Value
-------------------
1 A 25
1 B 28
2 C 30
2 D 35
这就是我想要的:
Number User Value
-------------------
1 A,B 25,28
2 C,D 30,35
我尝试使用 Listagg,但它给了我ORA-01489: result of string concatenation is too long.
这是 listagg 命令:
SELECT "Number",
LISTAGG ("user", ', ') WITHIN GROUP (ORDER BY "user") "user",
LISTAGG ("value", ', ') WITHIN GROUP (ORDER BY "user") VALUE
FROM table
GROUP BY "Number";
我无法创建类型,因为我没有权限。在其他类似问题之一中,有人建议使用 collect。所以使用这个:
SELECT number, CAST (COLLECT (USER) AS SYS.DBMSOUTPUT_LINESARRAY)
FROM emp
GROUP BY number;
我不知道从这里去哪里。当我运行这个查询时,我得到这个列:
CAST(COLLECT(USER)ASSYS
-----------------------
COLLECTION
COLLECTION
COLLECTION
如您所见,我的 sql 知识非常少。任何帮助将不胜感激!
【问题讨论】:
标签: sql oracle casting oracle11g collect