Freigeben über


JSON_ARRAYAGG (Transact-SQL)

Gilt für: SQL Server 2025 (17.x) Vorschau der 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 können auch in einer SELECT-Anweisung mit GROUP BY GROUPING SETS-Klausel verwendet werden.

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

Hinweis

Sowohl json-AggregatfunktionenJSON_OBJECTAGG als JSON_ARRAYAGG auch allgemein verfügbar für Azure SQL-Datenbank, Azure SQL Managed Instance (konfiguriert mit der Always-up-to-Datumsaktualisierungsrichtlinie) und Microsoft Fabric Data Warehouse.

Transact-SQL-Syntaxkonventionen

Syntax

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>

Argumente

value_expression

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

json_null_clause

Wahlfrei. json_null_clause kann zum Steuern des Verhaltens der Funktion JSON_ARRAYAGG verwendet werden, wenn value_expression gleich NULL ist. 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

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

Beispiele

Beispiel 1

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

SELECT JSON_ARRAYAGG(NULL);

Ergebnis

[]

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);

Ergebnis

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

Ergebnis

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

Ergebnis

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

Ergebnis

id Typ total_amount json_total_name_amount
1 ein 2 [2]
NULL ein 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]