Saya sedang mengeluarkan laporan daripada sistem perakaunan. Sistem ini mempunyai tabiat buruk untuk meletakkan pendua dalam pangkalan data, yang dikendalikan secara dalaman (daripada membersihkannya di tempat pertama!)
Ambil jumlah jadual invois 125 sebagai contoh:
+------------+-----------+----------+ | 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 | +------------+-----------+----------+
Dan jadual invois dengan id yang sama
+-----+----------+ | id | amount | +-----+----------+ | 125 | 330.0000 | +-----+----------+
Saya ingin menjana jumlah jualan dan cukai untuk satu tempoh (untuk BAS Australia)
Pertanyaan contoh kerja minimum saya (yang akan berfungsi jika data bersih) ialah
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';
Namun, disebabkan pendua dalam jadual jumlah, saya mendapat dua kali ganda jumlah jualan yang sepatutnya. Selain daripada menampal kod, adakah terdapat cara terbaik untuk menyelesaikan masalah ini?
Anda boleh mengalih keluar pendua dengan menggunakan subkueri dengan
DISTINCT
db<>fiddle di sini