共用方式為


JSON_ARRAYAGG (Transact-SQL)

適用於: SQL Server 2025 (17.x) Azure SQL Database AzureSQL Managed InstanceSQL database in Microsoft Fabric

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

備註

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

json 彙總函數JSON_OBJECTAGGJSON_ARRAYAGG都是:

  • 正式適用於 Azure SQL 資料庫、Azure SQL 受控執行個體 (具有 SQL Server 2025Always-up-to-date更新原則**)、Microsoft Fabric 中的 SQL 資料庫,以及 Fabric Data Warehouse。

  • SQL Server 2025(17.x)預覽版。

Transact-SQL 語法慣例

Syntax

JSON_ARRAYAGG (value_expression [ order_by_clause ] [ json_null_clause ] [ RETURNING json ] )

json_null_clause ::=  NULL ON NULL | ABSENT ON NULL

order_by_clause ::= ORDER BY <column_list>

Arguments

value_expression

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

json_null_clause

Optional. 當 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

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

返回值

傳回 nvarchar(max) 類型的有效 JSON 陣列字串。 如果包含選項 RETURNING json ,則會以 json 類型傳回 JSON 陣列。

Examples

範例 1

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

SELECT JSON_ARRAYAGG(NULL);

Result

[]

範例 2

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

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

Result

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

範例 3

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

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

Result

["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;

Result

object_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), ());

Result

id 型別 total_amount json_total_name_amount
1 a 2 [2]
NULL a 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]

範例 6

下列範例會傳回 JSON 陣列作為 json 類型。

SELECT JSON_ARRAYAGG(1 RETURNING JSON);

Result

[1]