適用於:SQL Server 2025 (17.x) 在
Microsoft Fabric 中預覽
Azure SQL Database
Azure SQL 受控實例 SQL 資料庫
從 SQL 資料或資料行的彙總建構 JSON 陣列。 JSON_ARRAYAGG也可以在 SELECT 語句中使用 GROUP BY GROUPING SETS 子句。
若要改為從彙總建立 JSON 物件,請使用 JSON_OBJECTAGG。
注意
json 聚合函數JSON_OBJECTAGG
和 JSON_ARRAYAGG
都已正式提供給 Azure SQL Database、Azure SQL 受控實例(使用 Always-up-to-date 更新原則設定),以及Microsoft網狀架構數據倉儲。
語法
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_expression 為 JSON_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匯總。 前兩個數據行會傳回 id
和 type
數據行值。 第三個數據行 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] |