Freigeben über


JSON_ARRAYAGG (Transact-SQL)

Gilt für: SQL Server 2025 (17.x) Azure SQL-Datenbank AzureSQL Managed InstanceSQL SQL-Datenbank in Microsoft Fabric

Erstellt ein JSON-Array aus einer Aggregation von SQL-Daten oder -Spalten. JSON_ARRAYAGG kann auch in einer SELECT Anweisung mit GROUP BY GROUPING SETS Klausel verwendet werden.

Hinweis

Verwenden Sie JSON_OBJECTAGG, um stattdessen ein JSON-Objekt aus einem Aggregat zu erstellen.

Beide json-AggregatfunktionenJSON_OBJECTAGG und JSON_ARRAYAGG sind:

  • allgemein verfügbar für Azure SQL-Datenbank, Azure SQL Managed Instance (mit sql Server 2025 oder Always-up-to-dateupdate policy**), SQL-Datenbank in Microsoft Fabric und Fabric Data Warehouse.

  • in der Vorschau für SQL Server 2025 (17.x).

Transact-SQL-Syntaxkonventionen

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

Der Wertausdruck kann eine Spalte oder ein Ausdruck in einer Abfrage oder Konstanten/Literale sein.

json_null_clause

Optional. json_null_clause können verwendet werden, um das Verhalten der JSON_ARRAYAGG Funktion zu steuern, wenn value_expression ist NULL. Die Option NULL ON NULL konvertiert den SQL-NULL-Wert in einen JSON-Null-Wert, wenn der Wert des Elements im JSON-Array generiert wird. Die Option ABSENT ON NULL lässt das Element im JSON-Array aus, wenn der Wert NULL ist. Wenn nicht angegeben, ist ABSENT ON NULL der Standardwert.

order_by_clause

Optional. Die Reihenfolge der Elemente im resultierenden JSON-Array kann angegeben werden, um die Eingabezeilen an das Aggregat zu ordnen.

Rückgabewert

Gibt eine gültige JSON-Arrayzeichenfolge vom Typ nvarchar(max) zurück. Wenn die RETURNING json Option enthalten ist, wird das JSON-Array als JSON-Typ zurückgegeben.

Examples

Beispiel 1

Im folgenden Beispiel wird ein leeres JSON-Array zurückgegeben.

SELECT JSON_ARRAYAGG(NULL);

Result

[]

Beispiel 2

Im folgenden Beispiel wird ein JSON-Array mit drei Elementen aus einem Resultset erstellt.

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

Result

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

Beispiel 3

Im folgenden Beispiel wird ein JSON-Array mit drei Elementen erstellt, die nach dem Wert der Spalte sortiert sind.

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

Result

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

Beispiel 4

Im folgenden Beispiel wird ein Ergebnis mit zwei Spalten zurückgegeben. Die erste Spalte enthält den Wert object_id. Die zweite Spalte enthält ein JSON-Array, das die Namen der Spalten enthält. Die Spalten im JSON-Array werden basierend auf dem Wert column_id sortiert.

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"]

Beispiel 5

Im folgenden Beispiel wird ein Ergebnis mit vier Spalten aus einer SELECT-Anweisung zurückgegeben, die SUMME enthält, und JSON_ARRAYAGG Aggregate mit GROUP BY GROUPING SETS. Die ersten beiden Spalten geben den Wert und id den type Spaltenwert zurück. Die dritte Spalte total_amount gibt den Wert des SUMME-Aggregats in der amount Spalte zurück. Die vierte Spalte json_total_amount gibt den Wert JSON_ARRAYAGG Aggregats in der amount Spalte zurück.

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 type 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]

Beispiel 6

Im folgenden Beispiel wird ein JSON-Array als JSON-Typ zurückgegeben.

SELECT JSON_ARRAYAGG(1 RETURNING JSON);

Result

[1]