【发布时间】:2021-10-20 19:02:43
【问题描述】:
我有下表,我正在尝试将这些行组合成 JSON 对象。
| 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 |
结果应该是这样的。
| 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"} |
我目前的查询是这样的。我已经能够做到这一点,但不知道如何从这里开始。
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
;
提前致谢!
解决方案
这是我的最后一个查询。
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
;
【问题讨论】:
标签: sql json sql-server tsql sql-server-2016