我希望能够从SQL Server返回一个JSON数组作为JSON对象的一部分。
我试图让它工作并且已经接近但这不是我希望JSON被构造的方式。
这个SQL我输出了这个
SELECT c.Pk_Company_Id AS [id],
c.Name AS [name],
r.Pk_Rig_Id AS [rigId]
FROM Company c
LEFT JOIN Rig r
ON c.Pk_Company_Id = r.Fk_Company_Id
FOR JSON PATH, ROOT('companies')
{"companies":[{"id":1,"name":"Company 1","rigId":100},{"id":1,"name":"Company 1","rigId":101},{"id":2,"name":"Company 2"}]}
这产生了JSON,它具有我想要的一切,但我想将rigId结构化为JSON数组来生成这样的东西,所以我不会无缘无故地复制一个对象。
{"companies":[{"id":1,"name":"Company 1","rigIds":[100, 101]},{"id":2,"name":"Company 2"}]}
REPLACE
的变种:
SELECT
c.Pk_Company_Id AS [id],
c.Name AS [name],
JSON_QUERY(REPLACE(REPLACE((SELECT r.Pk_Rig_Id id FROM Rig r WHERE c.Pk_Company_Id = r.Fk_Company_Id FOR JSON PATH),'{"id":',''),'}','')) [rigIds]
FROM Company c
FOR JSON PATH, ROOT('companies')
-- {"companies":[{"id":1,"name":"Company 1","rigIds":[100,101]},{"id":2,"name":"Company 2"}]}
STRING_AGG
的变种:
SELECT
c.Pk_Company_Id AS [id],
c.Name AS [name],
JSON_QUERY((SELECT '['+STRING_AGG(r.Pk_Rig_Id,',')+']' FROM Rig r WHERE c.Pk_Company_Id = r.Fk_Company_Id)) [rigIds]
FROM Company c
FOR JSON PATH, ROOT('companies')