SQL Server возвращает массив идентификаторов JSON для соответствующих строк - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу иметь возможность возвращать массив идентификаторов JSON как часть объекта JSON из SQL Server.

Я пытался заставить это работать и приблизился, но я не хочу, чтобы 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, в котором есть все, что я хочу, но я хотел бы структурировать rigIds как массив JSON, чтобы получить что-то подобное, поэтому я не дублирую объект без причины.

{"companies":[{"id":1,"name":"Company 1","rigIds":[100, 101]},{"id":2,"name":"Company 2"}]}

1 Ответ

1 голос
/ 25 апреля 2019

Вариант с 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...