Rumah > Soal Jawab > teks badan
Saya ada 4 meja:
1-Pembekal
ID_A | Nama pembekal |
---|---|
1 | Epal |
2 | Xiaomi |
3 | Nokia |
4 | OPPO |
2-Mulakan baki
ID_B | Imbangan permulaan |
---|---|
1 | 1000 |
2 | 1000 |
3 | 1000 |
4 | kosong |
3- Invois
ID_C | Nilai invois |
---|---|
1 | 200 |
1 | 500 |
2 | 800 |
3 | 250 |
3 | 400 |
4 | kosong |
4-Kembali
ID_D | Pulangan_nilai |
---|---|
1 | 100 |
2 | 50 |
2 | 25 |
3 | kosong |
4 | kosong |
Kaedah aritmetik untuk memaparkan data sebagai hasilnya:
Baki Permulaan + Invois - Pulangan = Baki Akhir
Saya cuba menggunakan UNION dan JOINS dalam mysql:
SELECT null , Supplier_name , ID_A , SUM(Invoice_value) , null , null FROM Suppliers inner JOIN Invoices ON ID_A = ID_C group by ID_A UNION ALL SELECT null , Supplier_name , ID_A , null , SUM(Return_value), null FROM Suppliers left JOIN Returns ON ID_A = ID_D group by ID_A UNION ALL SELECT Start Balance , Supplier_name, ID_A , null , null ,( Start Balance + ifnull(SUM(Invoice_value),0) - ifnull(SUM(Return_value),0) ) FROM Suppliers left JOIN Start Balance ON ID_A = ID_B left JOIN Invoices ON ID_A = ID_C left JOIN Returns ON ID_A = ID_D group by ID_A
Saya jangkakan keputusan ini ialah:
Imbangan permulaan | Nama pembekal | ID_A | Nilai invois | Pulangan_nilai | Imbangan_Akhir |
---|---|---|---|---|---|
1000 | Epal | 1 | 700 | 100 | 1600 |
1000 | Xiaomi | 2 | 800 | 75 | 1725 |
1000 | Nokia | 3 | 650 | kosong | 1650 |
kosong | OPPO | 4 | kosong | kosong | kosong |
Tetapi ia tidak berfungsi dengan baik, ia menunjukkan keputusan dalam baris yang berbeza dan pengiraan baki akhir adalah salah Apakah kod yang betul untuk memaparkan hasil ini
P粉9463361382023-09-12 00:33:52
Anda boleh menjumlahkan jumlah dalam subkueri dan menyertainya bersama
SELECT `Start Balance`, Supplier_name , ID_A , `Invoice_value` , `Return_value` , `Start Balance` + IFNULL(Invoice_value,0) - ifnull(Return_value,0) total FROM Suppliers left JOIN Start_Balance ON ID_A = ID_B left JOIN ( SELECT `ID_C`, SUM(`Invoice_value`) `Invoice_value` FROM Invoices GROUP By ID_C) i ON ID_A = ID_C left JOIN ( SELECT `ID_D`, SUM(`Return_value`) `Return_value` FROM Returns GROUP BY `ID_D`) r ON ID_A = ID_D
Baki Permulaan | Nama pembekal | ID_A | Nilai_invois | Pulangan_nilai | Jumlah |
---|---|---|---|---|---|
1000 | Epal | 1 | 700 | 100 | 1600 |
1000 | Xiaomi | 2 | 800 | 75 | 1725 |
1000 | Nokia | 3 | 650 | kosong | 1650 |
kosong | OPPO | 4 | kosong | kosong | kosong |