我有 4 張桌子:
1-供應商
ID_A | 供應商名稱 |
---|---|
1 | 蘋果 |
2 | 小米 |
3 | 諾基亞 |
4 | OPPO |
2-開始餘額
ID_B | 起始餘額 |
---|---|
1 | 1000 |
2 | 1000 |
3 | 1000 |
4 | 空 |
3- 發票
ID_C | 發票值 |
---|---|
1 | 200 |
1 | 500 |
2 | 800 |
3 | 250 |
3 | 400 |
4 | 空 |
4-返回
ID_D | Return_value |
---|---|
1 | 100 |
2 | 50 |
2 | 25 |
3 | 空 |
4 | 空 |
結果顯示資料的算術方法:
起始餘額 發票 - 退貨 = 最終餘額
我嘗試在 mysql 中使用 UNION 和 JOINS :
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
我預期這個結果是:
起始餘額 | 供應商名稱 | ID_A | 發票值 | Return_value | End_Balance |
---|---|---|---|---|---|
1000 | 蘋果 | 1 | 700 | 100 | 1600 |
1000 | 小米 | 2 | 800 | 75 | 1725 |
1000 | 諾基亞 | 3 | 650 | 空 | 1650 |
空 | OPPO | 4 | 空 | 空 | 空 |
但效果不佳,它在不同的行中顯示結果,最終餘額的計算是錯誤的 請問顯示此結果的正確程式碼是什麼
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 | 空 | 空 | 空 |