[英]TSQL Select basic hierarchical data from JSON
这是一个非常简单的问题,但我在任何地方都找不到一个可行的例子。 MSDN 暗示这是可能的( here和here ),但错过了实际示例,Google 提供了无数从TSQL 输出 JSON 的示例,而我需要相反的示例。
采用最基本的 JSON 结构:
DECLARE @json nvarchar(max) = N'[{
"Id": 1,
"name": "John",
"skills": [
{"title": "Azure" },
{"title": "VB" },
{"title": "JavaScript" }]
}, {
"Id": 2,
"name": "Jane",
"skills": [
{"title": "Azure" },
{"title": "SQL" },
{"title": "C#" }]
}]';
我想出了如何获得最高级别的值,例如Id
和name
:
SELECT
*
FROM
OPENJSON(@json) WITH (
ID int '$.Id',
name nvarchar(50) '$.name'
);
我想要的是输出PersonId和各自的技能 title s,例如
PersonId SkillTitle
-----------------------
1 Azure
1 VB
1 JavaScript
2 Azure
2 SQL
2 C#
谷歌只为我提供了反向逻辑。 我根据我所能找到的严重破坏的尝试在这里:
SELECT
*
FROM
OPENJSON(@json, '$.skills') WITH (
PersonId int './Id',
SkillTitle nvarchar(50) '$.title'
);
下面的代码片段会给你所需的结果 -
SELECT
JSON_Value (c.value, '$.Id') as ID,
JSON_Value (p.value, '$.title') as SkillTitle
FROM OPENJSON (@json) as c
CROSS APPLY OPENJSON(c.value,'$.skills') as p
通过CROSS APPLY
将JSON
子节点与父节点并使用JSON_Value()
函数实现了相同的功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.