Heim  >  Fragen und Antworten  >  Hauptteil

Wie summiere ich mehrere Datenspalten aus mehreren Tabellen in MySQL?

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粉615886660P粉615886660404 Tage vor526

Antworte allen(1)Ich werde antworten

  • P粉946336138

    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

    小提琴

    Antwort
    0
  • StornierenAntwort