5

关于这个主题有很多类似的问题,但我找不到任何解决方案考虑到任何最终结果对于 varchar2 来说太大的问题。

所以我想做的是改变这个:

Column1 | Column2
-------- --------
1         Hello
1         world,
1         please help
2         Thanks
2         world,
2         you're the best.

进入这个:

Column1 | Column2
-------- --------
1         Hello world, please help
2         Thanks world, you're the best.

我的特殊问题是在某些情况下新的连接值超过 4000 个字符,所以我不能LISTAGG按我希望的那样使用。我对无需编写函数的解决方案特别感兴趣,但两者都可以。

4

3 回答 3

2

正如 de.hh.holger 已经指出的那样,LISTAGG WITH CLOB? XMLAGG 的字符串聚合超过 4000 个字符确实解决了这个问题。

我已经详细说明了这个主题,如果字符串消息很长,这应该可以解决问题:

SELECT
   table_row_id,
   DBMS_XMLGEN.CONVERT (
     EXTRACT(
       xmltype('<?xml version="1.0"?><document>' ||
               XMLAGG(
                 XMLTYPE('<V>' || DBMS_XMLGEN.CONVERT(data_value)|| '</V>')
                 order by myOrder).getclobval() || '</document>'),
               '/document/V/text()').getclobval(),1) AS data_value
FROM (
   SELECT 1 myOrder, 1 table_row_id,'abcdefg>' data_value FROM dual
   UNION ALL
   SELECT 2, 1 table_row_id,'hijklmn' data_value FROM dual
   UNION ALL
   SELECT 3, 1 table_row_id,'opqrst' data_value FROM dual
   UNION ALL
   SELECT 4, 1 table_row_id,'uvwxyz' data_value FROM dual)
GROUP BY
   table_row_id
于 2014-06-12T07:54:04.760 回答
1
SELECT Column1 , LISTAGG(Column2, ' ') 
WITHIN GROUP (ORDER BY Column2) AS employees
FROM   Table1
GROUP BY Column1 ;

请看看这篇文章

于 2013-08-05T13:43:36.243 回答
0

您可以使用 xmlagg 连接 clob 列值,下面是它在上表中工作的查询:-

SELECT DEMO.COLUMN1, RTRIM(XMLAGG(XMLELEMENT(E, DEMO.COLUMN2, '').EXTRACT('//TEXT()') ORDER BY DEMO.COLUMN1).GETCLOBVAL(),',') AS COLUMN2
FROM DEMO_TBL DEMO
GROUP BY COLUMN1;
于 2020-09-26T10:47:58.227 回答