我在使用 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] 删除。
我来说两句