2

私の顧客は listagg 関数なしで db2 データベースを使用していますが、1 つのフィールド内の主キー情報を何らかの方法で集約する必要があります。

現在(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 フィックスパック 4 1より前の DB2 データベースで listagg 関数の結果を取得する別の方法はありますか?

私の顧客のデータベースのバージョン: Linux - Enterprise server edition 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 のような機能はありません:(.顧客が使用しているネアンデルタール人のデータベースは何ですか?それとも何か不足していますか?

回答ありがとうございます。

4

1 に答える 1

3

DB2 のバージョンが pureXML をサポートしている場合 (少なくとも LUW 9.1 の DB2 であり、z/OS の DB2 9 を信じています)、上記の @PM77-1 の提案に加えて、XMLAGG 関数を使用できます。

select xmlserialize(
  xmlagg(
    xmlconcat(
      xmltext(column_name),
      xmltext(':'),
      xmltext(content),
      xmltext(',')
    )
  ) as varchar(10000)
) 
from 
  yourtable 
...
于 2013-09-30T17:44:30.003 に答える