У меня есть простой JSON с вложенными массивами, некоторые из которых могут быть пустыми или нулевыми, и я не могу получить всю строку в результате из-за нулевого значения.
declare @json nvarchar(max)
set @json = '{"orders": [{
"id": 1,
"items":
[{
"sku": "abc",
"quantity": 1,
"price": 100,
"discount":
[{
"amount": "10",
"amount_set":
{
"shop":
{
"total": "10",
"currency_code": "EUR"
},
"presentment":
{
"total": "10",
"currency_code": "EUR"
}
}
}]
}]
},{
"id": 2,
"items":
[{
"sku": "def",
"quantity": 1,
"price": 111,
"discount": []
}]
}
] }'
SELECT cOrderID, cSKU, nQty, nPrice, nDiscount
FROM
(
OPENJSON(@json, '$.orders')
WITH (
cOrderID NVARCHAR(20) '$.id',
Items NVARCHAR(MAX) '$.items' AS JSON
)
CROSS APPLY OPENJSON(Items,'$')
WITH (
cSKU NVARCHAR(30) '$.sku',
nQty DECIMAL(19,6) '$.quantity',
nPrice FLOAT '$.price',
Discount NVARCHAR(MAX) '$.discount' AS JSON
)
CROSS APPLY OPENJSON(Discount,'$')
WITH (
nDiscount DECIMAL(19,6) '$.amount'
)
)
Я получаю этот результат :
cOrderID cSKU nQty nPrice nDiscount
------------ ------------- ------------- --------------- -----------------
1 abc 1.000000 100 10.000000
Я ожидаю получить этот результат:
cOrderID cSKU nQty nPrice nDiscount
------------ ------------- ------------- --------------- -----------------
1 abc 1.000000 100 10.000000
2 def 1.000000 111 null
Как показать строки с пустыми массивами?