Преобразование полей Json и реляционных полей в несколько строк - PullRequest
0 голосов
/ 31 мая 2018

Я новичок в Json & SQL Server.Поскольку SQL Server 2016 может поддерживать значения Json, у меня есть задача.

У меня есть таблица SQL с полем CustomeID (int) и другим полем, которое содержит значение массива json, которое содержит различные элементы, принадлежащиеэтот уникальный клиент.

Пример:

Customer ID | JsonCol 
55          | [{"Id":"12","Height":"150","Weight":"75","Colour":"White"}, 
              {"Id":"15","Height":"160","Weight":"85","Colour":"Brown"}]
65          | [{"Id":"16","Height":"155","Weight":"65","Colour":"Red"}, 
              {"Id":"20","Height":"167","Weight":"55","Colour":"Black"}]

Я хотел бы сделать запрос в SQL Server, чтобы получить следующий результат, я не знаю, как вставить в него таблицы.Но в основном вывод должен повторять Customer для каждой комбинации данных, которые массив имеет в поле Json

CustomerID   | ID | Height | Weight | Colour
55           | 12 | 150    | 75     | White
55           | 15 | 160    | 85     | Brown
65           | 16 | 155    | 65     | Red
65           | 20 | 167    | 55     | Black

Может кто-то так любезно дать мне идею, с чего начать.Я уже перепробовал все статьи Microsoft о поддержке Json.

Заранее спасибо.

1 Ответ

0 голосов
/ 31 мая 2018

Используйте OPENJSON с выводом по умолчанию для получения элементов массива, а затем OPENJSON вывод с явной структурой для получения элементов.Поместите его вместе с CROSS APPLY s.

SELECT CustomerID,
       x.Id,
       x.Height,
       x.Weight,
       x.Colour
       FROM Customer C
       CROSS APPLY (SELECT *
                           FROM OPENJSON(C.JsonCol)
                           CROSS APPLY OPENJSON(value)
                                 WITH (Id integer '$.Id',
                                       Height integer '$.Height',
                                       Weight integer '$.Weight',
                                       Colour nvarchar(8) '$.Colour')) x;

SQL Fiddle

...