You need an OPENJSON()
call with the appropriate path
to access the nested $.source_info.help_info.details
JSON array and an additional APPLYSTRING_AGG()
operatorto aggregate the names:
Sample data:
SELECT *
INTO Data
FROM (VALUES
(1, 45745, '{"source":"XYZ",
"source_info":{
"type":"need_help",
"help_info":{
"questions":50,
"details":[{"floatv":0.42,"name":"Tom"},{"floatv":1.08,"name":"Dick"},{"floatv":1.2,"name":"Harry"}]}}}')
) v (UID, ID, JSON)
Statement:
SELECT d.
ID, j.NAME
FROM Data d NAMES = (
CROSS APPLY OPENJSON SELECT STRING_AGG(d.JSONJSON_VALUE([value], '$.source_info.help_info.details'name'), WITH' (')
NAME varchar WITHIN GROUP (100ORDER BY CONVERT(int, [key]))
FROM OPENJSON(JSON, '$.name'source_info.help_info.details')
)
FROM jData
Result:
ID | NAME |
---|---|
45745 | Tom |
45745 | Dick |
45745 | Harry |