转换Json字段&关系字段分为多行

时间:2018-05-30 23:28:34

标签: sql json sql-server-2016

我对Json& SQL Server。由于SQL Server 2016可以支持Json值,因此我手头有一个任务。

我有一个带有CustomeID(int)Field&的SQL表。另一个包含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中进行查询以获得以下结果,我不知道如何将表插入到此中。但基本上输出应该为数组在Json字段中的每个数据组合重复Customer

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

有人可以如此友好地告诉我从哪里开始。我已经尝试过围绕Json支持的所有微软文章。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

使用OPENJSON with the default output获取数组元素,然后使用OPENJSON output with an explicit structure获取元素。将其与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