Pemprosesan SQL untuk membersihkan dan menjumlahkan data pendua dalam jadual bercantum
P粉354948724
P粉354948724 2023-09-13 15:15:50
0
1
525

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?

P粉354948724
P粉354948724

membalas semua(1)
P粉511985082

Anda boleh mengalih keluar pendua dengan menggunakan subkueri dengan DISTINCT

db<>fiddle di sini

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan