小编典典

db2中的Listagg替代品

sql

我的客户正在使用不带listagg功能的db2数据库,但是我需要以某种方式在一个字段中聚合主键信息。

现在(对于Oracle),我正在将其用作更大查询的一部分:

SELECT LISTAGG(COLUMN_NAME || ':' || CONTENT, ',') 
WITHIN GROUP (ORDER BY COLUMN_NAME || ':' || CONTENT) 
FROM TABLE
WHERE ROW_IDENTIFIER_ID = I.REC_ID AND I.TABLE_RESULT_ID = T.REC_ID

从9.7 Fix Pack4版本1开始,还有另一种方法可以在DB2之前的db2数据库中获取listagg函数的结果。

客户数据库的版本:Linux-企业服务器版本9.7,发行号08060107
我通过执行以下选择获得了它:

SELECT * FROM TABLE(SYSPROC.ENV_GET_INST_INFO()) AS SYSTEMINFO;
SELECT * FROM TABLE(SYSPROC.ENV_GET_PROD_INFO()) AS SYSTEMINFO;
SELECT * FROM TABLE(SYSPROC.ENV_GET_SYS_INFO()) AS SYSTEMINFO;

我承认我不明白,怎么可能是9.7,但是没有listagg函数?:使困惑:

我也执行了:

SELECT * FROM SYSCAT.FUNCTIONS

我返回了此函数列表,但答案中没有其他解决方案中提到的诸如xmltext或xmlgroup之类的函数:(。客户使用的是哪个穴居人数据库?还是我缺少什么?

感谢您的答复。


阅读 756

收藏
2021-05-05

共1个答案

小编典典

如果您的DB2版本支持pureXML(至少是DB2 for LUW 9.1,并且我相信DB2 9 for z / OS),除了上面建议的@
PM77-1之外,还可以使用XMLAGG函数:

select xmlserialize(
  xmlagg(
    xmlconcat(
      xmltext(column_name),
      xmltext(':'),
      xmltext(content),
      xmltext(',')
    )
  ) as varchar(10000)
) 
from 
  yourtable 
...
2021-05-05