首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Json字段和关系字段转换为多行

将Json字段和关系字段转换为多行
EN

Stack Overflow用户
提问于 2018-05-31 07:28:34
回答 1查看 967关注 0票数 0

我对Json和SQL Server真的很陌生。由于SQL Server 2016可以支持Json值,因此我手头有一项任务。

我有一个带有CustomeID (int)字段的SQL表&另一个字段保存了一个json数组值,该值保存了属于那个惟一客户的不同元素。

例如:

代码语言:javascript
复制
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

代码语言:javascript
复制
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支持的文章。

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-31 09:23:37

使用OPENJSON with the default output获取数组元素,然后使用OPENJSON output with an explicit structure获取元素。将其与CROSS APPLYs放在一起。

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50614634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档