我有一个像这样的公用表表达式查询。
;WITH Orders AS (
SELECT OrderStatus,
OrderID,
OrderedBy,
OrderItems
FROM Orders
WHERE StudentGuid = @StudentGuid
)
所需的 JSON 数组输出应如下所示。
[
{
"status":"Accepted",
"orders":[
{
"OrderID":"100-1000",
"OrderedBy":"John Smith"
},
{
"OrderID":"100-1001",
"OrderedBy":"John Smith"
}
]
},
{
"status":"Rejected",
"orders":[
{
"OrderID":"100-1002",
"OrderedBy":"John Smith"
}
]
}
]
我目前的查询是;
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))
我的查询的问题是它不是动态的(因为状态是硬编码的)并且最终结果中的“订单节点”由于“联合”而无法被 JSON 格式化程序解析。
如何删除硬编码并使用 CTE 使其动态化?
谢谢!