I have the following table and I'm trying to combine the rows into JSON objects.
| Username | AccessKeys | Marker |
|---|---|---|
| user1 | {"Account":"1","Checking":"0001","Loan":"null","Savings":0} |
New |
| user2 | {"Account":"2","Checking":"0001","Loan":"null","Savings":0} |
New |
| user2 | {"Account":"3","Checking":"0001","Loan":"null","Savings":0} |
New |
The result should look something like this.
| Username | JSON |
|---|---|
| user1 | {"Accounts": [{"Account": "1","Checking": "0001","Loan": null,"Savings": 0}],"Marker": "New"} |
| user2 | {"Accounts": [{"Account": "1","Checking": "0001","Loan": null,"Savings": 0},{"Account": "2","Checking": "0001","Loan": null,"Savings": 0}],"Marker": "New"} |
My current query is this. I've been able to get this far but not sure how to proceed from here.
SELECT
Username
,Accounts = (
SELECT
Account
,Checking
,Loan
,Savings
FROM dbo.Accounts A1
WHERE A1.Account= A2.Account
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
FROM
dbo.Accounts A2
GROUP BY
Accounts
,Username
;
Thanks in advance!
Solution
This is my final query.
SELECT
Username
,(
SELECT
Accounts = JSON_QUERY((
SELECT AK.*
FROM
dbo.Accounts A2
CROSS APPLY OPENJSON(Accounts) WITH (
Account nvarchar(10)
,Checking nvarchar(10)
,Loan nvarchar(10)
,Savings int
) AK
WHERE A2.Username = A1.Username
FOR JSON PATH
))
,'New' Marker
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
) JSON
FROM dbo.Accounts A1
GROUP BY Username
;