我对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支持的所有微软文章。
提前谢谢。
答案 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;