Гнездо Json Array слияния
У меня есть столбец, сохраненный данные JSON в моей таблице:
declare @json nvarchar(max)
set @json = N'
{
"Companies": [
{
"CompanyId": "A",
"Employee": null
},
{
"CompanyId": "B",
"Employee": [
{
"EmployeePictureId": null,
"Name": "Employee1"
},
{
"EmployeePictureId": "PictureId2",
"Name": "Employee2"
}
]
},
{
"CompanyId": "C",
"Employee": [
{
"EmployeePictureId": null,
"Name": "Employee3"
},
{
"EmployeePictureId": null,
"Name": "Employee4"
}
]
}
]
}
'
Возможно ли получить результат как:
{
"EmployeePictureIds": ["PictureId2"]
}
с использованием Json_Query
, Json_Value
, OPENJSON
...
Только получить EmployeePictureId
и пропустить пустые (нулевые) данные
Кстати, количество элементов в массиве не точно.
1 ответ
В SQL Server 2017 вы можете использовать следующий запрос:
select json_query(QUOTENAME(STRING_AGG('"' + STRING_ESCAPE( A.EmployeePictureId , 'json')
+ '"', char(44)))) as [EmployeePictureIds]
FROM OPENJSON(@json, '$.Companies')
WITH
(
CompanyId NVARCHAR(MAX),
Employee NVARCHAR(MAX) as json
) as B
cross apply openjson (B.Employee)
with
(
EmployeePictureId VARCHAR(50),
[Name] VARCHAR(50)
) as A
where A.EmployeePictureId is not null
for json path , WITHOUT_ARRAY_WRAPPER
Результаты для JSON вы предоставили:
Результаты добавления другого, не равного нулю EmployeePictureId
: