apps
table
app_id | app_name | app_status ------------------------------------- 1 scheduling INACTIVE 2 call ACTIVE 3 billing ACTIVE 4 order ACTIVE
I have a query,
SELECT * FROM apps WHERE app_status = "ACTIVE" FOR JSON PATH;
This query has an app_id
field. I also want a field to accompany the json
output with a field ids
with all the app_id
as a list.
So instead of:
[{ "app_id": 2, "app_name": "call", "status": "ACTIVE" }, { "app_id": 3, "app_name": "billing", "status": "ACTIVE" }, { "app_id": 4, "app_name": "order", "status": "ACTIVE" }]
I would have:
[{ "apps": [{ "app_id": 2, "app_name": "call", "status": "ACTIVE" }, { "app_id": 3, "app_name": "billing", "status": "ACTIVE" }, { "app_id": 4, "app_name": "order", "status": "ACTIVE" }], "ids": [2, 3, 4] }]
Advertisement
Answer
This returns the correct JSON
Data
drop table if exists dbo.tTable; go create table dbo.tTable( app_id int not null, [app_name] nvarchar(200), app_status nvarchar(200)); insert dbo.tTable(app_id, app_name, app_status) values (1, 'scheduling', 'INACTIVE'), (2, 'call', 'ACTIVE'), (3, 'billing', 'ACTIVE'), (4, 'order', 'ACTIVE');
Query
with active_cte as ( select * FROM tTable WHERE app_status = 'ACTIVE') SELECT (select * FROM active_cte FOR JSON PATH) apps, (select JSON_QUERY(concat('[',string_agg(app_id, ','),']'),'$') from active_cte) ids for json path;
Output
[ { "apps": [ { "app_id": 2, "app_name": "call", "app_status": "ACTIVE" }, { "app_id": 3, "app_name": "billing", "app_status": "ACTIVE" }, { "app_id": 4, "app_name": "order", "app_status": "ACTIVE" } ], "ids": [ 2, 3, 4 ] } ]