我的客户正在使用没有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
在DB2版本9.7修订包4 1 之前,有另一种方法可以在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
我找回了这个function list,但是在答案中的替代解决方案中没有提到像xmltext或xmlgroup这样的函数:(。 客户使用什么尼安德特人数据库?或者我错过了什么?
感谢您的回复。
答案 0 :(得分:2)
如果您的DB2版本支持pureXML(至少是DB2 for LUW 9.1并且我相信DB2 9 for z / OS),除了上面提到的@ PM77-1之外,您还可以使用XMLAGG函数:< / p>
select xmlserialize(
xmlagg(
xmlconcat(
xmltext(column_name),
xmltext(':'),
xmltext(content),
xmltext(',')
)
) as varchar(10000)
)
from
yourtable
...