当子级包含空数组时,Azure CosmosDB sql联接不返回结果

问题描述 投票:0回答:1

我们具有以下json结构。具有嵌套的对象数组。某些数组可能为空。

[
{
    "adjustments": [
        {
            "id": "1_0000001",
            "clientID": 1,
            "adjustmentID": "0000001",
            "chargeID": "0000001",
            "dateOfEntry": "2019-01-29T00:00:00",
            "adjustmentAmount": 200
        }
    ],
    "payments": [
        {
            "id": "1_0000001",
            "clientID": 1,
            "paymentID": "0000001",
            "chargeID": "0000001",
            "dateOfDeposit": "2019-01-28T00:00:00",
            "dateOfEntry": "2019-01-29T00:00:00",
            "paymentAmount": 250,
        },
        {
            "id": "1_0000002",
            "clientID": 1,
            "paymentID": "0000002",
            "chargeID": "0000001",
            "dateOfDeposit": "2019-01-28T00:00:00",
            "dateOfEntry": "2019-01-29T00:00:00",
            "paymentAmount": 50,
        }
    ],
    "id": "1_0000001",
    "clientID": 1,
    "chargeID": "0000001",
    "encounterID": "0000001",
    "patientID": "1234567"
    "dateOfServiceBegin": "2019-01-20T00:00:00",
    "dateOfServiceEnd": "2019-01-20T00:00:00",
    "dateOfEntry": "2019-01-21T00:00:00",
    "location": "Main Campus",
    "chargeTotal": 500

},
{
    "adjustments": [],
    "payments": [],
    "id": "1_0000001",
    "clientID": 1,
    "chargeID": "0000001",
    "encounterID": "0000001",
    "patientID": "1234567"
    "dateOfServiceBegin": "2019-02-20T00:00:00",
    "dateOfServiceEnd": "2019-02-20T00:00:00",
    "dateOfEntry": "2019-02-21T00:00:00",
    "location": "Main Campus",
    "chargeTotal": 500
}
]

我正在尝试执行以下查询

SELECT udf.getMonthAndYearPart(c.dateOfEntry) as date, sum(p.paymentAmount) as paymentAmount , sum(c.chargeTotal) as chargeAmount , sum(a.adjustmentAmount) as adjustmentAmount FROM c
JOIN p IN c.payments 
JOIN a IN c.adjustments 
where c.dateOfEntry >= '2019-01-11T18:30:00.000Z' and c.dateOfEntry <= '2020-12-30T18:30:00.000Z' 
GROUP BY udf.getMonthAndYearPart(c.dateOfEntry)

我期待以下结果

[
    {
        "date": "January-2019",
        "paymentAmount": 300,
        "chargeAmount": 1000,
        "adjustmentAmount": 400
    },
    {
        "date": "February-2019",
        "chargeAmount": 500,
    }
]

但是我只有第一个对象

[
    {
        "date": "January-2019",
        "paymentAmount": 300,
        "chargeAmount": 1000,
        "adjustmentAmount": 400
    }
]

我有什么可以不参加而做的吗?我想按月按组计算子对象金额的总和。请帮助。

azure azure-cosmosdb azure-cosmosdb-sqlapi
1个回答
0
投票

根据您的情况,您需要在查询中进行左联接,以包括带有空白调整或付款的单据案例。目前不支持LEFT JOIN,您可以投票this thread包括此功能。在此期间,您可以创建一个过程并执行两个单独的查询,一个查询与使用join的方式相同,另一个查询不对数组_length为0的条目使用连接和过滤(where子句)进行调整和付款,然后汇总所有结果并结果。

© www.soinside.com 2019 - 2024. All rights reserved.