XMLAGG 聚集函数
XMLAGG 函数将返回一个 XML 序列,对于 XML 值集合中的每个非空值,该序列都包含一项。
该模式是 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 不会在输出中插入空格或换行符。 已对所有示例输出进行格式化来增强可读性。
