我正在尝试制作两个表格,根据他们的合同编号将它们合并在一起,然后获得两年之间每个客户合同金额的总和。
但是,其中一些合同来自较旧的系统,在该系统中我们没有在当前系统中进行记录。我们所拥有的是一个已归档的表,该表显示了合同的价格,但与旧合同没有关系。我不能只从已存档的表中获取数据的原因是,即使这些合同已存档,也可以在此之后随时删除或取消。
因此,我想弄清楚如何将这两个表连接在一起,并在某些绑定到合同编号而有些未绑定到客户编号的情况下,获得客户合同总额的总和?
我知道这很难解释,但希望通过显示架构和查询会有所帮助。
这是我们的存档表架构,其中包含客户从旧系统和新系统获得的每个合同的存档。
|customer_id | contract_amount | date | contract_number |
|1 | 300.00 | 2019-02-01 | abc123 |
|1 | 250.00 | 2019-02-03 | abc456 |
|1 | 320.00 | 2019-04-02 | abc789 |
|1 | 230.00 | 2019-07-03 | efg123 |
合同表架构:
|customer_id | contract_amount | date_authorized | contract_number | status |
|1 | 300.00 | 2019-01-03 | abc123 | Approved |
|1 | 250.00 | 2019-01-06 | abc456 | Cancelled|
|1 | 320.00 | 2019-02-01 | abc789 | Approved |
这是我当前正在获取2020年至2019年客户1的合同总额的查询:
select a.customer_id
, sum(a.contract_amount) as year_total
from Archives_Table a
left
join Contracts_Table c
on (a.contract_number = c.contract_number)
where a.date >= '2019-01-01'
and a.date < '2020-01-01'
and c.status = 'Approved'
and a.customer_id = '1';
我得到的结果是:
|customer_id | year_total |
|1 | 620.00 |
但是我应该得到这个:
|customer_id | year_total |
|1 | 850.00 |
合同编号efg123来自旧系统,我们在新系统中没有实际合同数据的记录,因此应将其添加到year_total
。我尝试了普通联接,左联接和右联接,以查看这是否会更改数据但没有运气。我曾尝试在网上寻找类似问题,但无法找到这种情况。如果有人能指出正确的方向或知道如何解决这个问题,那将是很好的。
在c.status
该值efg123
合同,后左侧空参加,并通过过滤c.status = 'Approved'
中WHERE
的条款。因此,尝试像这样更改您的SQL查询:
SELECT
a.customer_id, SUM(a.contract_amount) AS year_total
FROM Archives_Table a
LEFT JOIN Contracts_Table c ON (a.contract_number = c.contract_number)
WHERE a.date >= '2019-01-01' AND a.date < '2020-01-01' AND a.customer_id = '1'
AND COALESCE(c.status, 'Approved') = 'Approved'
GROUP BY a.customer_id
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句