XMLAGG 集約関数
XMLAGG 関数は、1 セットの XML 値の中の NULL 以外の値ごとに 1 つの項目を含む XML シーケンスを戻します。
sort-key
スキーマは SYSIBM です。
- XML表現
- XML 値を戻す式。
他の集約関数の引数とは異なり、XML-expression の中ではスカラー全選択を使用できます。
- ORDER BY
- 集合内の処理対象の、同じグループ化集合に属する行の順序を指定します。 ORDER BY 文節を指定しない場合、または ORDER BY 文節ではソート・キー値の順序を区別できない場合、同じグループ内の行は任意に順序付けられます。
- ソートキー
- 列名または式のどちらかのソート・キー値を指定します。 列または式のデータ・タイプは、LOB 値または XML 値であってはなりません。 文字ストリング式の長さは、4000 バイトを超えることはできません。 ソート・キー値が定数の場合、それは出力列の位置を参照するもの (通常の ORDER BY 文節のように) ではなく、単なる定数です。これは、ソート・キーではないことを意味しています。
順序付けはソート・キーの値に基づいて行われ、これは XML-expression の中で使用される場合もされない場合もあります。
ソート・キー値が Unicode 以外のコード化スキームを使用する文字ストリングの場合、順序付けは異なる可能性があります。 例えば、列 PRODCODE は EBCDIC を使用しているとします。 2 つの値 ('P001' と 'PA01') の場合、関係 'P001' > 'PA01' は EBCDIC では真であり、'P001' < 'PA01' は UTF-8 では真です。 同じソート・キー値が XML-expression の中で使用されている場合は、CAST 指定を使用してソート・キーを Unicode に変換することにより、XML 値の順序付けをソート・キーの順序付けと整合させることができます。
この関数は、引数の値から NULL 値を除いて求めた値の集合に対して適用されます。
結果は NULL になる可能性があります。XML-expression 引数がすべて NULL の場合、結果は NULL 値です。 空のセットに関数を適用すると、結果は NULL 値となります。 それ以外の場合、結果はそのセット内のそれぞれの値ごとに 1 つの項目を含む XML シーケンスです。
以下の制約が XMLAGG に適用されます。
XMLAGG は OLAP 仕様の一部として使用できません。
XMLAGG 関数の呼び出しが含まれている SELECT節に、ARRAY_AGG 関数または LISTAGG 関数の呼び出しも含めてはなりません。
例: 従業員を部門別にグループ化し、部門の名前を属性として使用して各部門ごとに「Department」エレメントを生成し、各部門の従業員に対応する「emp」エレメントをすべてネストし、「emp」エレメントを「lname」によって順序付けます。
SELECT XMLSERIALIZE(XMLDOCUMENT
( XMLELEMENT
( NAME "Department",
XMLATTRIBUTES ( e.dept AS "name" ),
XMLAGG ( XMLELEMENT ( NAME "emp", e.lname)
ORDER BY e.lname)
) ) AS "dept_list"
AS CLOB(1M))
FROM employees e
GROUP BY dept;照会の結果は、次の結果のようになります。
dept_list
---------------------------------------------
<Department name="Accounting">
<emp>SMITH</emp>
<emp>Yates</emp>
</Department>
<Department name="Shipping">
<emp>Martin</emp>
<emp>Oppenheimer</emp>
</Department>
------------------------------------------------