共用方式為


JSON_ARRAYAGG (Transact-SQL)

適用於:SQL Server 2025 (17.x) 在Microsoft Fabric 中預覽 Azure SQL DatabaseAzure SQL 受控實例 SQL 資料庫

從 SQL 資料或資料行的彙總建構 JSON 陣列。 JSON_ARRAYAGG也可以在 SELECT 語句中使用 GROUP BY GROUPING SETS 子句。

若要改為從彙總建立 JSON 物件,請使用 JSON_OBJECTAGG

注意

json 聚合函數JSON_OBJECTAGGJSON_ARRAYAGG 都已正式提供給 Azure SQL Database、Azure SQL 受控實例(使用 Always-up-to-date 更新原則設定),以及Microsoft網狀架構數據倉儲。

Transact-SQL 語法慣例

語法

JSON_ARRAYAGG (value_expression [ order_by_clause ] [ json_null_clause ] )

json_null_clause ::=  NULL ON NULL | ABSENT ON NULL

order_by_clause ::= ORDER BY <column_list>

引數

value_expression

值運算式可以是查詢或常數/常值中的資料行或運算式。

json_null_clause

選擇性。 當 value_expressionJSON_ARRAYAGG 時,json_null_clause 可用來控制 NULL 函數的行為。 NULL ON NULL 選項會在於 JSON 陣列中產生元素值時,將 SQL NULL 值轉換成 JSON null 值。 如果值為 ABSENT ON NULL,則 NULL 選項會省略 JSON 陣列中的元素。 如果省略,則 ABSENT ON NULL 為預設值。

order_by_clause

選擇性。 您可以指定產生的 JSON 陣列中的元素順序,將輸入資料列排序為彙總。

範例

範例 1

下列範例會傳回空白 JSON 陣列。

SELECT JSON_ARRAYAGG(NULL);

結果

[]

範例 2

下列範例會從結果集建構具有三個元素的 JSON 陣列。

SELECT JSON_ARRAYAGG(c1)
FROM (VALUES ('c'), ('b'), ('a')) AS t(c1);

結果

["c","b","a"]

範例 3

下列範例會建構一個 JSON 陣列,其中包含三個按資料行值排序的元素。

SELECT JSON_ARRAYAGG( c1 ORDER BY c1)
FROM (
    VALUES ('c'), ('b'), ('a')
) AS t(c1);

結果

["a","b","c"]

範例 4

下列範例會傳回包含兩個資料行的結果。 第一個資料行包含 object_id 值。 第二個資料行包含 JSON 陣列,其中包含資料行的名稱。 JSON 陣列中的資料行會根據 column_id 值來排序。

SELECT TOP(5) c.object_id, JSON_ARRAYAGG(c.name ORDER BY c.column_id) AS column_list
FROM sys.columns AS c
GROUP BY c.object_id;

結果

物件ID column_list
3 ["rsid","rscolid","hbcolid","rcmodified","ti","cid","ordkey","maxinrowlen","status","offset","nullbit","bitpos","colguid","ordlock"]
5 ["rowsetid","ownertype","idmajor","idminor","numpart","status","fgidfs","rcrows","cmprlevel","fillfact","maxnullbit","maxleaf","maxint","minleaf","minint","rsguid","lockres","scope_id"]
6 ["id","subid","partid","version","segid","cloneid","rowsetid","dbfragid","status"]
7 ["auid","type","ownerid","status","fgid","pgfirst","pgroot","pgfirstiam","pcused","pcdata","pcreserved"]
8 ["status","fileid","name","filename"]

範例 5

下列範例會從包含 SUM 的 SELECT 語句傳回含有四個數據行的結果,並使用 GROUP BY GROUPING SETS 來JSON_ARRAYAGG匯總。 前兩個數據行會傳回 idtype 數據行值。 第三個數據行 total_amount 會傳回數據行上 amount SUM 匯總的值。 第四個數據行 json_total_amount 會傳回數據行上 amount JSON_ARRAYAGG匯總的值。

WITH T
AS (SELECT *
    FROM (VALUES (1, 'k1', 'a', 2), (1, 'k2', 'b', 3), (1, 'k3', 'b', 4), (2, 'j1', 'd', 7), (2, 'j2', 'd', 9)) AS b(id, name, type, amount))
SELECT id,
       type,
       SUM(amount) AS total_amount,
       JSON_ARRAYAGG(amount) AS json_total_amount
FROM T
GROUP BY GROUPING SETS((id), (type), (id, type), ());

結果

識別碼 類型 total_amount json_total_name_amount
1 2 [2]
NULL 2 [2]
1 b 7 [4,3]
NULL b 7 [4,3]
2 d 16 [9,7]
NULL d 16 [9,7]
NULL NULL 25 [2,4,3,9,7]
1 NULL 9 [3,4,2]
2 NULL 16 [9,7]