Heim > Fragen und Antworten > Hauptteil
Ich habe 4 Tische:
1-Lieferant
ID_A | Lieferantenname |
---|---|
1 | Apfel |
2 | Xiaomi |
3 | Nokia |
4 | OPPO |
2-Start-Guthaben
ID_B | Startguthaben |
---|---|
1 | 1000 |
2 | 1000 |
3 | 1000 |
4 | leer |
3- Rechnung
ID_C | Rechnungswert |
---|---|
1 | 200 |
1 | 500 |
2 | 800 |
3 | 250 |
3 | 400 |
4 | leer |
4-Rückkehr
ID_D | Rückgabewert |
---|---|
1 | 100 |
2 | 50 |
2 | 25 |
3 | leer |
4 | leer |
Arithmetische Methode zur Anzeige der Daten als Ergebnis:
Anfangssaldo + Rechnung – Retouren = Endsaldo
Ich versuche, UNION und JOINS in MySQL zu verwenden:
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
Ich erwarte folgendes Ergebnis:
Startguthaben | Lieferantenname | ID_A | Rechnungswert | Rückgabewert | End_Balance |
---|---|---|---|---|---|
1000 | Apfel | 1 | 700 | 100 | 1600 |
1000 | Xiaomi | 2 | 800 | 75 | 1725 |
1000 | Nokia | 3 | 650 | leer | 1650 |
leer | OPPO | 4 | leer | leer | leer |
Aber es funktioniert nicht gut, es zeigt die Ergebnisse in verschiedenen Zeilen an und die Berechnung des Endsaldos ist falsch Was ist der richtige Code, um dieses Ergebnis anzuzeigen?
P粉9463361382023-09-12 00:33:52
您可以对子查询中的总和进行求和并将它们连接在一起
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
起始余额 | 供应商名称 | ID_A | Invoice_value | Return_value | 总计 |
---|---|---|---|---|---|
1000 | 苹果 | 1 | 700 | 100 | 1600 |
1000 | 小米 | 2 | 800 | 75 | 1725 |
1000 | 诺基亚 | 3 | 650 | 空 | 1650 |
空 | OPPO | 4 | 空 | 空 | 空 |