Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x) (wersja zapoznawcza
) Azure SQL Database
Azure SQL Managed Instance SQL Database
w usłudze Microsoft Fabric
Tworzy obiekt JSON z agregacji danych SQL lub kolumn. JSON_OBJECTAGG można również użyć w instrukcji SELECT z klauzulą GROUP BY GROUPING SETS.
Pary klucz/wartość można określić jako wartości wejściowe, kolumnę, odwołania do zmiennych.
Aby utworzyć tablicę JSON na podstawie agregacji, użyj JSON_ARRAYAGG.
Nuta
Zarówno funkcje agregujące JSON_OBJECTAGG
, jak i JSON_ARRAYAGG
są ogólnie dostępne dla usługi Azure SQL Database, usługi Azure SQL Managed Instance (skonfigurowane z zasadami zawszeup-to-date update) i Fabric Data Warehouse.
Transact-SQL konwencje składni
Składnia
JSON_OBJECTAGG ( json_key_value [ json_null_clause ] )
json_key_value ::= <json_name> : <value_expression>
json_null_clause ::= NULL ON NULL | ABSENT ON NULL
Argumenty
json_key_value
Para klucz/wartość obiektu JSON.
json_null_clause
Fakultatywny. Pomija całą właściwość obiektu, jeśli wartość jest NULL
, lub użyj wartości null JSON jako wartości właściwości. W przypadku pominięcia NULL ON NULL
jest ustawieniem domyślnym.
Przykłady
Odp. Zwracanie obiektu JSON z jednym kluczem
Poniższy przykład zwraca obiekt JSON z jedną wartością klucza i wartością null.
select JSON_OBJECTAGG ( 'key':null )
Oto zestaw wyników.
{"key":null}
B. Konstruowanie obiektu JSON z zestawu wyników
Poniższy przykład tworzy obiekt JSON z trzema właściwościami z zestawu wyników.
SELECT JSON_OBJECTAGG( c1:c2 )
FROM (
VALUES('key1', 'c'), ('key2', 'b'), ('key3','a')
) AS t(c1, c2);
Oto zestaw wyników.
{"key1":"c","key2":"b","key3":"a"}
C. Zwraca wynik z dwiema kolumnami
Poniższy przykład zwraca wynik z dwiema kolumnami. Pierwsza kolumna zawiera wartość object_id
. Druga kolumna zawiera obiekt JSON, w którym klucz jest nazwą kolumny i wartością jest column_id
.
SELECT TOP(5) c.object_id, JSON_OBJECTAGG(c.name:c.column_id) AS columns
FROM sys.columns AS c
GROUP BY c.object_id;
Oto zestaw wyników.
identyfikator_obiektu | column_list |
---|---|
3 | {"bitpos":12,"cid":6,"colguid":13,"hbcolid":3,"maxinrowlen":8,"nullbit":11,"offset":10,"ordkey":7,"ordlock":14,"rcmodified":4,"rscolid":2,"rsid":1,"status":9,"ti":5} |
5 | {"cmprlevel":9,"fgidfs":7,"fillfact":10,"idmajor":3,"idminor":4,"lockres":17,"maxint":13,"maxleaf":12,"maxnullbit":11,"minint":15,"minleaf":14,"numpart":5,"ownertype":2,"rcrows":8,"rowsetid":1,"rsguid":16,"scope_id":18,"status":6} |
6 | {"cloneid":6,"dbfragid":8,"id":1,"partid":3,"rowsetid":7,"segid":5,"status":9,"subid":2,"version":4} |
7 | {"auid":1,"fgid":5,"ownerid":3,"pcdata":10,"pcreserved":11,"pcused":9,"pgfirst":6,"pgfirstiam":8,"pgroot":7,"status":4,"type":2} |
8 | {"fileid":2,"filename":4,"name":3,"status":1} |
D. Zwracanie zagregowanego wyniku z czterema kolumnami
Poniższy przykład zwraca wynik z czterema kolumnami z instrukcji zawierającej SELECT
SUM
instrukcje i JSON_OBJECTAGG
agregujące z elementem GROUP BY GROUPING SETS
. Dwie pierwsze kolumny zwracają id
wartość i type
kolumny. Trzecia kolumna total_amount
zwraca wartość SUM
agregacji w kolumnie amount
. Czwarta kolumna json_total_name_amount
zwraca wartość JSON_OBJECTAGG
agregacji w kolumnach name
i amount
.
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_OBJECTAGG(name:amount) as json_total_name_amount
FROM T
GROUP BY GROUPING SETS((id), (type), (id, type), ());
Oto zestaw wyników.
id | rodzaj | total_amount | json_total_name_amount |
---|---|---|---|
1 | a | 2 | {"k1":2} |
NULL |
a | 2 | {"k1":2} |
1 | b | 7 | {"k3":4,"k2":3} |
NULL |
b | 7 | {"k3":4,"k2":3} |
2 | d | 16 | {"j2":9,"j1":7} |
NULL |
d | 16 | {"j2":9,"j1":7} |
NULL |
NULL |
25 | {"k1":2,"k3":4,"k2":3,"j2":9,"j1":7} |
1 | NULL |
9 | {"k2":3,"k3":4,"k1":2} |
2 | NULL |
16 | {"j2":9,"j1":7} |