我有以下Json:

{
  "archeTypes": [
    {
      "archeTypeId": 12,
      "elements": [
        {
          "elementId": 6,
          "value": "string6"
        },
        {
          "elementId": 7,
          "value": "string7"
        }
      ]
    }
  ]
}

这是我的代码:

DECLARE @json NVARCHAR(MAX);
SET @json='{"archeTypes":[{"archeTypeId":12,"elements":[{"elementId":6,"value":"string6"},{"elementId":7,"value":"string7"}]}]}';
SELECT *
FROM OPENJSON(@json)
    WITH (
    ArcheTypeId INT '$.archeTypes.archeTypeId',
    ElementId INT '$.archeTypes.elements.elementId',
    Value NVARCHAR(max) '$.archeTypes.elements.value'
    );

这是我想要的表格:

ArcheTypeId ElementId Value
12 6 string6
12 7 string7

如何将json转换为表?

推荐答案

这有帮助吗?(使用cross apply)

DECLARE @json NVARCHAR(MAX);
SET @json='{"archeTypes":[{"archeTypeId":12,"elements":[{"elementId":6,"value":"string6"},{"elementId":7,"value":"string7"}]}]}';
SELECT archeTypes.ArcheTypeId,elements.ElementId,elements.Value
FROM OPENJSON(@json)
    WITH 
        (
            archeTypes nvarchar(max) as JSON
        ) as archeType cross apply
        OPENJSON(archeType.archeTypes)
        WITH
            (
                archeTypeId INT,
                elements nvarchar(max) as JSON
            ) as archeTypes cross apply
            OPENJSON(archeTypes.elements)
            WITH
                (
                    elementId INT,
                    value nvarchar(max)
                ) as elements
    ;

DB<>Fiddle

Sql相关问答推荐

如何在SQL Server中列出从当前月份开始的过go 10年中的月份

Access 365将文本转换回BigInt

如何在SQL中按每个子组的顺序更新数据?

计算分段的总权重

如何根据计数和分组获取订单总数

如何在snowflake中进行SQL的反向填充

是否可以为表中的所有列生成散列值?

在SELECT中将日期格式转换为双周时段

SQL中相同表内的VLOOKUP等价

输出连续出现两次以上的行

如何在android房间中进行多个加入

如何为 ActiveRecord 联接应用附加条件

MariaDB非常简单的MATCHAGAINST查询不使用FULLTEXT索引吗?

正则表达式:停在第一个匹配的其中一个字符位置上

在Snowflake中如何使用SQL对版本字符串进行排序?

根据潜在空值的条件对记录进行计数

如何获得上个月和下个月之间的销售额差异

基于postgresql中特定条件的俱乐部两张表

从 varchar 或文本列中提取多个匹配项作为 MariaDB 中的行

显示 30 天内未购买的客户