0

Oracle 数据库 11g 企业版 11.2.0.2.0 - 64 位生产。

我有一个以下格式的表格。

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 知识非常少。任何帮助将非常感激!

4

1 回答 1

1

尝试使用 xmlagg 方法:

rtrim(xmlagg(xmlelement(e, name1 || ',')).extract('//text()').getclobval(), ',')

这是一个 sqlfiddle 演示

于 2013-07-24T15:42:09.660 回答