У меня есть обычный запрос табличного выражения вроде этого.
;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))
Проблема с моим запросом в том, что это не динамический c (поскольку статус жестко запрограммирован), и «узел заказов» в конечном результате не может быть проанализирован с помощью JSON форматировщиков из-за «объединений».
Как мне удалить жесткое кодирование и сделать его динамическим c с CTE?
Спасибо!