您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

ARRAY_AGG 函数

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 函数不支持使用值表达式代替表变量。