XMLTABLE 返回空结果集后的聚合函数

杰克斯科罗

我在使用 LISTAGG() 函数的查询中遇到问题。

以这种形式从表开始

A   B
1  a:b:e
2  c:d:f

然后我在表中将其转换为这种形式:

A  B
1  a
1  b
1  e
2  c
2  d
2  f

使用此查询:

SELECT A,
  trim(COLUMN_VALUE) B
FROM one,
  xmltable(('"'
  || REPLACE(B, ':', '","')
  || '"'))

然后我执行一个

SELECT A,
  LISTAGG(B, ', ') WITHIN GROUP (ORDER BY B)
FROM two
GROUP BY A

再次回到表格:

A    B
1  a,b,e
2  c,d,f

问题是最后查询返回一个空的结果集:

A    B

而不是我期待的那个。不幸的是,我无法使用更简单的查询重新创建我的问题,并且我无法共享原始查询,因为它包含敏感信息。

我希望这可能是一个已知问题,或者可能与字段数据类型有关。我试图TO_CHAR(B)LISTAGG()函数内部添加一个但没有成功。

杰克斯科罗

我对可能的数据类型问题的预感是正确的。

该函数xmltable返回一个类型的列XMLTYPE,在我的案件列每当尝试聚合该数据类型的字段时,聚合函数都会失败。

我通过将XMLTYPE转换为获取此查询的字符串来解决此问题:

SELECT A,
  trim((COLUMN_VALUE).getstringval()) B
FROM one,
  xmltable(('"'
  || REPLACE(B, ':', '","')
  || '"'))

使用此查询返回的结果是正确的。

非常感谢所有试图提供帮助的人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章