对连接表中的重复数据进行清理并求和的SQL处理
P粉354948724
P粉354948724 2023-09-13 15:15:50
0
1
556

我正在从一个记账系统中提取报告。该系统有一个讨厌的习惯,会在数据库中放置重复项,而它会在内部处理这些重复项(而不是一开始就清理干净!)

以发票125的总计表为例:

+------------+-----------+----------+
| invoice_id | code      | amount   |
+------------+-----------+----------+
|        125 | sub_total | 300.0000 |
|        125 | tax       |  30.0000 |
|        125 | total     | 330.0000 |
|        125 | sub_total | 300.0000 |
|        125 | tax       |  30.0000 |
|        125 | total     | 330.0000 |
+------------+-----------+----------+

以及相同id的发票表

+-----+----------+
| id  | amount   |
+-----+----------+
| 125 | 330.0000 |
+-----+----------+

我想要为一个时期生成总销售额和税金(用于澳大利亚BAS)

我的最小工作示例查询(如果数据干净的话可以工作)是

select sum(a.amount) as total_sales, sum(c.amount) as total_GST
from 7cn_invoices a 
    INNER JOIN 7cn_invoice_totals c ON a.id = c.invoice_id
where c.code = 'tax';

然而,由于总计表中有重复项,我得到的总销售额是应该的两倍。除了修补代码外,有什么解决这个问题的最佳方法吗?

P粉354948724
P粉354948724

全部回复(1)
P粉511985082

你可以通过使用带有DISTINCT的子查询来删除重复项

db<>fiddle 在这里

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板