我正在从一个记账系统中提取报告。该系统有一个讨厌的习惯,会在数据库中放置重复项,而它会在内部处理这些重复项(而不是一开始就清理干净!)
以发票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';
然而,由于总计表中有重复项,我得到的总销售额是应该的两倍。除了修补代码外,有什么解决这个问题的最佳方法吗?
你可以通过使用带有
DISTINCT
的子查询来删除重复项db<>fiddle 在这里