首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用XMLAGG将多行连接在XmlAgg函数或任何等效逻辑中以连接多个行

使用XMLAGG将多行连接在XmlAgg函数或任何等效逻辑中以连接多个行
EN

Stack Overflow用户
提问于 2020-07-10 05:45:31
回答 2查看 4.3K关注 0票数 2

我有一个记录表试图连接组wise上的多个行,我使用了XMLAGG函数,但是当我试图运行对具有2000条记录的特定组的查询时,会得到错误消息:

选择失败9134 :在计算过程中超过了聚合的中间聚合存储限制

代码语言:javascript
运行
复制
SELECT 
  H.GROUP_id,
  H.Group_name,
  TRIM(
    TRAILING ',' FROM (
      XMLAGG(TRIM(COALESCE(H.Group_desc, -1) || '') ORDER BY H.LINE_NBR) (VARCHAR(7000))
    )
  ) AS Group_detail

即使增加了varchar值,但仍然存在相同的问题。

EN

回答 2

Stack Overflow用户

发布于 2020-07-10 12:08:10

XMLAGG()增加了开销。但是,您可以通过以下方法了解结果集的大小:

代码语言:javascript
运行
复制
SELECT H.GROUP_id, H.Group_name,
       SUM(LENGTH(COALESCE(H.Group_Desc, '-1'))) as total_string_length,
       COUNT(*) as cnt
FROM . . .
GROUP BY H.GROUP_id, H.Group_name
ORDER BY total_string_length DESC

您可能会发现,其中一些组的字符串总数接近或超过7000个字符。

我不确定你是想修复数据还是做其他的事情。但这至少应该找出问题所在。

票数 1
EN

Stack Overflow用户

发布于 2022-05-17 16:06:03

问题是,对于dataset中的每一行,都会重复连接,您需要首先获得不同的Group_desc,尝试如下:

代码语言:javascript
运行
复制
WITH BASE AS(
  SEL
     H.GROUP_id,
     H.Group_name,
     H.Group_desc,
     MAX(H.LINE_NBR) AS LINE_NBR 
  FROM TABLE_NAME
  GROUP BY 1,2,3
)
SELECT 
  BASE.GROUP_id,
  BASE.Group_name,
  TRIM(
    TRAILING ',' FROM (
      XMLAGG(TRIM(COALESCE(BASE.Group_desc, -1) || '') ORDER BY BASE.LINE_NBR) (VARCHAR(7000)) -- You probably won't need the varchar to be that large.
    )
  ) AS Group_detail

FROM BASE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62827997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档