我有一個JSON變數,看起來像這樣(真正的變數更復雜):
我有一個JSON變數,看起來像這樣(真正的變數更復雜):
DECLARE @myJson VARCHAR(3000) = '{
"CustomerId": "123456",
"訂單"。[{
"OrderId": "852",
"OrderManifests": [{
"ShippedProductId": 884,
"ProductId": 884
}, {
"ShippedProductId": 951,
"ProductId": 2564
}
]
}, {
"OrderId": "5681",
"OrderManifests": [{
"ShippedProductId": 198,
"ProductId": 4681
}, {
"ShippedProductId": 8188,
"ProductId": 8188
}, {
"ShippedProductId": 144,
"ProductId": 8487
}
]
}
]
}'
最后,我需要知道是否有任何ShippedProductId值與它們相應的ProductId(在同一個JSON物件中)相匹配。
我開始嘗試獲取所有OrderManifests的串列。 但是,雖然這將使我得到訂單陣列:
SELECT JSON_QUERY(@myJson, '$. Orders')
我似乎找不到一種方法來獲取OrderManifests在Orders陣列中所有條目的串列。 這并不奏效:
SELECT JSON_QUERY(@myJson, $. Orders.OrderManifests')
是否有辦法做一個Select Many型別的查詢來獲取Orders陣列中的所有OrderManifests?
uj5u.com熱心網友回復:
使用OPENJSON和CROSS APPLY來深入研究你的物件。
這應該是為你做的:
這應該是為你做的。
SELECT j.CustomerId,o.OrderId, m.ShippedProductId, m.ProductId
FROM OPENJSON(@myJson)
WITH (
CustomerId NVARCHAR(1000)。
Orders NVARCHAR(MAX) AS JSON
) j
CROSS APPLY OPENJSON(j.Orders)
WITH (
OrderId NVARCHAR(1000)。
OrderManifests NVARCHAR(MAX) AS JSON
) o
CROSS APPLY OPENJSON(o.OrderManifests)
WITH (
ShippedProductId INT,
ProductId int WHERE m.ShippedProductId = m.ProductId。
這個查詢的結果是:
CustomerId | OrderId | ShipedProductId | ProductId
------------ ----------- ------------------- -------------
123456 | 852 | 884 | 884
------------ ----------- ------------------- -------------
123456 | 5681 | 8188 | 8188
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311077.html
標籤:
上一篇:根據所有地點的最新記錄計算平均數
