Попробуйте:
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[{"ID":1,"Roles":[1,2]},{"ID":2, "Roles":[1,2,3]},{"ID":3,"Roles":[1,2,3,4]}]'
SELECT pvt.[ID]
,roles.value
FROM
(
SELECT js.[key] as [key_id]
,roles.[key]
,roles.value
FROM OPENJSON(@json) js
CROSS APPLY OPENJSON(js.value) roles
) DS
PIVOT
(
MAX([value]) FOR [key] IN ([ID], [Roles])
) PVT
CROSS APPLY OPENJSON(pvt.roles) roles
![enter image description here](https://i.stack.imgur.com/Bc3TC.png)
или просто так:
SELECT JSON_VALUE(js.value, '$.ID')
,ds.[value]
FROM OPENJSON(@json) js
CROSS APPLY OPENJSON(JSON_QUERY(js.value, '$.Roles')) ds;