【问题标题】:Nested JSON path嵌套的 JSON 路径
【发布时间】:2021-12-05 13:47:36
【问题描述】:

我有一个格式如下的表格 -

orderNumber  |  orderName
-------------+------------
1            |  Pizza
1            |  Pasta

使用 SQL 查询,我希望输出格式如下 -

{
    "data": [{
        "orderNumber":1,
        "orders": [
            {"orderName": "Pizza"},
            {"orderName": "Pasta"}
        ]
    }]
}

但我的实际输出格式如下-

{
    "data": [
        {
            "orderNumber": 1,
            "orders" [
                {"orderName": "Pizza"}
            ]
        },
        {
            "orderNumber": 1,
            "orders": [
                {"orderName": "Pasta"}
            ]
        }
    ]
}

我使用的 SQL 查询是 -

SELECT
    (SELECT orderNumber as orderNumber,
        (SELECT orderName
         FROM sample_table b
         WHERE a.orderNumber = b.orderNumber
         FOR JSON PATH) AS orders
     FROM sample_table a FOR JSON PATH, ROOT('data')
    ) AS orderdata

谁能帮帮我?

【问题讨论】:

  • 根据问题指南,请避免将数据发布为图像,而应使用文本。我已经更新了这个问题。
  • $.data 应该是 JSON 数组,而不是对象(例如 "data: [...]")。

标签: sql json sql-server jsonpath for-json


【解决方案1】:
--You Can use distinct query to do so.

create table #temp
(orderNumber varchar(20),
orderName varchar(20))

insert into #temp 
values('1','Pizza'),
('1','Pasta'),
('2','KFC'),('2','MACD')

select distinct(orderNumber),
   (select orderName 
    from #temp b 
    where a.orderNumber = b.orderNumber 
    for json path) as orders 
from #temp a 
for json path, root ('data') 

【讨论】:

    【解决方案2】:

    你想要一个分组查询

    select 
       orderNumber,
       (select orderName 
        from sample_table b 
        where a.orderNumber = b.orderNumber 
        for json path) as orders 
    from sample_table a 
    group by orderNumber
    for json path, root ('data') 
    

    返回

    {
        "data": [
            {
                "orderNumber": 1,
                "orders": [
                    {
                        "orderName": "Pizza"
                    },
                    {
                        "orderName": "Pasta"
                    }
                ]
            }
        ]
    }
    

    【讨论】:

    • 感谢您的回复。如果查询具有像“orderName”这样的非聚合字段怎么办 - 选择 orderNumber,orderName,(从 sample_table b 中选择 orderName,其中 a.orderNumber = b.orderNumber 用于 json 路径)作为来自 sample_table 的订单 a group by orderNumber 用于 json 路径,根('data') 上面的查询怎么处理?
    • @SaitejaSedate,不确定我是否关注。 OrderName 要么是聚合的,要么不是。不能同时是两者。
    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2012-06-03
    相关资源
    最近更新 更多