2013-09-30 215 views
2

我的客戶正在使用DB2數據庫,而不LISTAGG功能,但我需要以某種方式聚集一個區域內的主鍵信息。LISTAGG替代在DB2

現在

右(甲骨文)我用這作爲更大查詢的一部分:

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之前得到LISTAGG功能的結果DB2數據庫版本9.7修訂包4 1

我的客戶的數據庫版本: - 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沒有功能:( 什麼尼安德特數據庫客戶使用?還是我失去了一些東西?

感謝您的答覆。

+1

看看[此解決方法](https://www.ibm.com/developerworks/mydeveloperworks/blogs/SQLTips4DB2LUW/entry/aggregating_strings42?lang = en)符合您的需求。 –

+1

您正在使用哪個DB2服務器:DB2 for i,LUW或z/OS?哪個版本?不同的DB2平臺具有不同的內置函數集。 – WarrenT

+0

更新了版本信息和功能列表的問題。 –

回答

2

如果你的DB2版本支持的pureXML(這將是LUW 9.1至少DB2,我相信DB 2月9日針對z/OS),此外還有什麼@ PM77-1上述建議,你可以使用XMLAGG函數:

select xmlserialize(
    xmlagg(
    xmlconcat(
     xmltext(column_name), 
     xmltext(':'), 
     xmltext(content), 
     xmltext(',') 
    ) 
) as varchar(10000) 
) 
from 
    yourtable 
... 
+1

PureXML支持令人驚訝地可用,但函數未列在問題中提到的選擇中。 與來自PM 77-1的解決方法提示一起,我設法找到了解決方案。非常感謝。 –

+1

「我設法找到解決方案」如果您可以共享您找到的解決方案,那將是非常棒的... – mathiasrw