cari

Rumah  >  Soal Jawab  >  teks badan

Pemprosesan SQL untuk membersihkan dan menjumlahkan data pendua dalam jadual bercantum

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粉354948724P粉354948724435 hari yang lalu528

membalas semua(1)saya akan balas

  • P粉511985082

    P粉5119850822023-09-14 11:15:40

    Anda boleh mengalih keluar pendua dengan menggunakan subkueri dengan DISTINCT

    db<>fiddle di sini

    balas
    0
  • Batalbalas