简体   繁体   English

JSON 数组查询中的动态值

[英]Dynamic values in JSON array query

I have a common table expression query like this.我有一个像这样的公用表表达式查询。

;WITH Orders AS (
                    SELECT  OrderStatus,
                            OrderID,
                            OrderedBy,
                            OrderItems
                    FROM    Orders
                    WHERE   StudentGuid = @StudentGuid
                  )

The desired JSON array output should look like this.所需的 JSON 阵列 output 应如下所示。

[
 {
  "status":"Accepted",
  "orders":[
     {
        "OrderID":"100-1000",
        "OrderedBy":"John Smith"
     },
     {
        "OrderID":"100-1001",
        "OrderedBy":"John Smith"
     }
  ]
},
{
  "status":"Rejected",
  "orders":[
     {
        "OrderID":"100-1002",
        "OrderedBy":"John Smith"
     }
  ]
}
]

My current query is;我目前的查询是;

SELECT CAST((
                SELECT * 
                FROM (
                        SELECT (SELECT 'Accepted') AS [OrderStatus],
                               (SELECT CAST((
                                            SELECT OrderID,
                                                   OrderedBy,
                                            FROM    Orders
                                            WHERE   [OrderStatus] = 'Accepted'
                                            FOR JSON PATH
                                            ) AS NVARCHAR(MAX))) AS Orders
                        UNION       
                        SELECT (SELECT 'Rejected') AS [OrderStatus],
                               (SELECT CAST((
                                            SELECT OrderID,
                                                   OrderedBy,
                                            FROM    Orders
                                            WHERE   [OrderStatus] = 'Rejected'
                                            FOR JSON PATH
                                            ) AS NVARCHAR(MAX))) AS Orders
                ) AS Temp FOR JSON PATH ) AS NVARCHAR(MAX))

The problem with my query is it is not dynamic (as status are hard coded) and "orders node" in the final outcome fail to parse by JSON Formatters due to "unions."我的查询的问题是它不是动态的(因为状态是硬编码的)并且最终结果中的“订单节点”由于“联合”而无法被 JSON 格式化程序解析。

How can I remove the hardcoding and make it dynamic with the CTE?如何删除硬编码并使用 CTE 使其动态化?

Thanks!谢谢!

Looks like this can be done using subqueries.看起来这可以使用子查询来完成。

    SELECT DISTINCT [status],
                    (SELECT orderID, 
                            orderedBy
                    FROM    Orders AS B
                    WHERE   [Status] = A.[Status]
                                FOR JSON PATH) AS Orders
    FROM Orders AS A

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM