首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Server 2016的OPENJSON函数从Json文档中的多个数组元素中选择结果

使用Server 2016的OPENJSON函数从Json文档中的多个数组元素中选择结果
EN

Stack Overflow用户
提问于 2017-07-31 22:09:06
回答 1查看 4.1K关注 0票数 3

在Server 2016中,是否有可能将来自多个数组元素的json文档的部分组合成单个结果?

考虑到这一点:

代码语言:javascript
复制
{
  "fruit": {
    "types": [
      {
        "possible": [ "Apples", "Bananas", "Pears" ],
        "category": "Basic"
      },
      {
        "possible": [ "Oranges", "Grapefruit", "Lemons", "Limes" ],
        "category": "Citrus"
      },
      {
        "possible": [ "Blueberries", "Strawberries", "Cherries" ],
        "category": "Berries"
      }
    ]
  }
}

我希望看到可能元素的所有值的一个结果:

代码语言:javascript
复制
results
-----
Apples
Bananas
Pears
Oranges
Grapefruit
Lemons
Limes
Blueberries
Strawberries
Cherries

我已经很接近了:

代码语言:javascript
复制
SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types[0].possible'))
UNION
SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types[1].possible'))
UNION
SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types[2].possible'))

但这依赖于将查询绑定到数组中的元素数。有没有办法做到这一点而不必单独指定每个数组元素?类似的内容(这两个都不是有效的表达式):

代码语言:javascript
复制
SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types[].possible'))

代码语言:javascript
复制
SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types.possible'))

这是我该做交叉申请的地方吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-31 23:24:38

这是我该做交叉申请的地方吗?

是啊。

代码语言:javascript
复制
declare @json nvarchar(max)='
{
  "fruit": {
    "types": [
      {
        "possible": [ "Apples", "Bananas", "Pears" ],
        "category": "Basic"
      },
      {
        "possible": [ "Oranges", "Grapefruit", "Lemons", "Limes" ],
        "category": "Citrus"
      },
      {
        "possible": [ "Blueberries", "Strawberries", "Cherries" ],
        "category": "Berries"
      }
    ]
  }
}
'

select v.value
from openjson(@json, '$.fruit.types') t
cross apply openjson(t.value,'$.possible') v

输出

代码语言:javascript
复制
value
---------
Apples
Bananas
Pears
Oranges
Grapefruit
Lemons
Limes
Blueberries
Strawberries
Cherries

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

https://stackoverflow.com/questions/45426043

复制
相关文章

相似问题

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