XMLAGG 聚集函数

XMLAGG 函数将返回一个 XML 序列,对于 XML 值集合中的每个非空值,该序列都包含一项。

Read syntax diagramSkip visual syntax diagramXMLAGG(XML-expression ORDER BY,sort-keyASCDESC )

该模式是 SYSIBM。 不能将函数名指定为限定名。

XML-expression
指定数据类型 XML 的表达式。 XML-expression 的数据类型不能是 BINARY 或 VARBINARY 类型 (SQLSTATE 42884)。
ORDER BY
指定位于同一分组集中且在聚集中处理的行的顺序。 如果省略了 ORDER BY 子句,或者 ORDER BY 子句无法区分列数据的顺序,那么同一分组集中的行是随意排序的。
sort-key
排序键可以是列名或 sort-key-expression。 请注意,如果排序键是一个常数,那么它没有引用输出列的位置(如普通 ORDER BY 子句中所示),而只是一个常数,这意味着没有排序键。

结果的数据类型为 XML。

该函数将应用于因为消除空值而从自变量值中派生出来的值集合。

如果 XML-expression 自变量可为空,那么结果可为空。 如果值集合是空的,那么结果为空。 否则,结果为 XML 序列,对于集合中的每个值,该序列都包含一项。

如果 SELECT 子句包含 ARRAY_AGG 函数,那么在同一 SELECT 子句中对 ARRAY_AGG、LISTAGG、XMLAGG 和 XMLGROUP 函数的所有调用必须指定相同的顺序或不指定顺序 (SQLSTATE 428GZ)。

注意

  • 在 OLAP 表达式中的支持:XMLAGG 不能用作 OLAP 聚集函数的列函数 (SQLSTATE 42601)。

示例

为每个部门构造部门元素,其中包含按姓氏排序的职员列表。
   SELECT XMLSERIALIZE(
     CONTENT XMLELEMENT(
       NAME "Department", XMLATTRIBUTES(
         E.WORKDEPT AS "name"
       ),
       XMLAGG(
         XMLELEMENT(
           NAME "emp", E.LASTNAME
         )
         ORDER BY E.LASTNAME
       )
     )
     AS CLOB(110)
   )
   AS "dept_list"
   FROM EMPLOYEE E
   WHERE E.WORKDEPT IN ('C01','E21')
   GROUP BY WORKDEPT
此查询将生成以下结果:
dept_list
-----------------------...
<Department name="C01">
  <emp>KWAN</emp>
  <emp>NICHOLLS</emp>
  <emp>QUINTANA</emp>
</Department>
<Department name="E21">
  <emp>GOUNOT</emp>
  <emp>LEE</emp>
  <emp>MEHTA</emp>
  <emp>SPENSER</emp>
</Department>
注: XMLAGG 不会在输出中插入空格或换行符。 已对所有示例输出进行格式化来增强可读性。