ARRAY_AGG 函数将表变量的列转换为数组。
= ARRAY_AGG ( :. [ORDER BY { [ {, }… ] [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] , ... } ] ) 在以下示例中,表变量标签的列 A 聚合为数组标识:
DECLARE id NVARCHAR(10) ARRAY;
DECLARE tab TABLE (A NVARCHAR(10), B INTEGER);
tab = SELECT A , B FROM tab1;
id = ARRAY_AGG(:tab.A);
数组类型需要与列具有相同的类型。
或者,可以使用 ORDER BY 子句来确定数组中元素的顺序。如果未指定,则数组元素为非确定性排序。在以下示例中,数组 id 的所有元素均按列 B 降序排序。
id = ARRAY_AGG(:tab.A ORDER BY B DESC);此外,还可以定义值在结果集中的显示位置 NULL。缺省情况下,首先返回 NULL 值以按升序排序,最后返回值以降序排序。可以使用 NULLS FIRST 或 NULLS LAST 覆盖此行为,以显式指定 NULL 值排序。下一个示例显示如何使用 NULLS FIRST 覆盖降序的缺省行为:
CREATE COLUMN TABLE CTAB (A NVARCHAR(10));
INSERT INTO CTAB VALUES ('A1');
INSERT INTO CTAB VALUES (NULL);
INSERT INTO CTAB VALUES ('A2');
INSERT INTO CTAB VALUES (NULL);
DO
BEGIN
DECLARE id NVARCHAR(10) ARRAY;
tab = SELECT A FROM ctab;
id = ARRAY_AGG(:tab.A ORDER BY A DESC NULLS FIRST);
tab2 = UNNEST(:id) AS (A);
SELECT * FROM :tab2;
END;
备注ARRAY_AGG 函数不支持使用值表达式代替表变量。