Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menjumlahkan berbilang lajur data daripada berbilang jadual dalam mysql?

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粉615886660P粉615886660405 hari yang lalu527

membalas semua(1)saya akan balas

  • P粉946336138

    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

    Violin

    balas
    0
  • Batalbalas