Dav*_*inn 2 sql-server json sql-server-2016 open-json
是否可以在 Sql Server 2016 中将来自多个数组元素的 json 文档的部分组合成单个结果?
鉴于此json:
{
  "fruit": {
    "types": [
      {
        "possible": [ "Apples", "Bananas", "Pears" ],
        "category": "Basic"
      },
      {
        "possible": [ "Oranges", "Grapefruit", "Lemons", "Limes" ],
        "category": "Citrus"
      },
      {
        "possible": [ "Blueberries", "Strawberries", "Cherries" ],
        "category": "Berries"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)
我想看到来自可能元素的所有值的单个结果:
results
-----
Apples
Bananas
Pears
Oranges
Grapefruit
Lemons
Limes
Blueberries
Strawberries
Cherries
Run Code Online (Sandbox Code Playgroud)
我已经接近这样做了:
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'))
Run Code Online (Sandbox Code Playgroud)
但这依赖于将查询与数组中的元素数量联系起来。有没有办法在不必单独指定每个数组元素的情况下做到这一点?像这样的东西(这些都不是有效的表达):
SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types[].possible'))
Run Code Online (Sandbox Code Playgroud)
或者
SELECT * FROM OPENJSON(JSON_QUERY(@json, '$.fruit.types.possible'))
Run Code Online (Sandbox Code Playgroud)
这是我应该进行交叉申请的地方吗?
这是我应该进行交叉申请的地方吗?
是的。
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
Run Code Online (Sandbox Code Playgroud)
产出
value
---------
Apples
Bananas
Pears
Oranges
Grapefruit
Lemons
Limes
Blueberries
Strawberries
Cherries
(10 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3205 次  |  
        
|   最近记录:  |