SQL Query untuk menjumlahkan bidang dari tabel yang berbeda

Saya seorang programmer rendah hati yang membenci SQL... :) Tolong bantu saya dengan pertanyaan ini.

Saya punya 4 tabel, misalnya:

Table A:
Id Total
1  100
2  200
3  500

Table B
ExtId  Amount
1      10
1      20
1      13
2      12
2      43
3      43
3      22

Table C
ExtId  Amount
1      10
1      20
1      13
2      12
2      43
3      43
3      22

Table D
ExtId  Amount
1      10
1      20
1      13
2      12
2      43
3      43
3      22

Saya perlu membuat SELECT yang menampilkan Id, Total dan SUM dari bidang Jumlah tabel B, C dan D seperti ini

Id Total AmountB AmountC AmountD
1  100   43      43      43
2  200   55      55      55
3  500   65      65      65

Saya sudah mencoba dengan gabungan dalam tiga tabel dengan Id dan melakukan penjumlahan bidang jumlah tetapi hasilnya tidak tepat. Inilah pertanyaan yang salah:

SELECT     dbo.A.Id, dbo.A.Total, SUM(dbo.B.Amount) AS Expr1, SUM(dbo.C.Amount) AS  Expr2, SUM(dbo.D.Amount) AS Expr3
FROM         dbo.A INNER JOIN
                  dbo.B ON dbo.A.Id = dbo.B.ExtId INNER JOIN
                  dbo.C ON dbo.A.Id = dbo.C.ExtId INNER JOIN
                  dbo.D ON dbo.A.Id = dbo.D.ExtId
GROUP BY dbo.A.Id, dbo.A.Total

Terima kasih sebelumnya, hanya saja saya benci SQL (atau SQL membenci saya).

EDIT: Saya salah ketik. Kueri ini tidak memberikan hasil yang tepat. Memperluas contohnya.


person Ignacio Soler Garcia    schedule 20.02.2010    source sumber


Jawaban (5)


Atau Anda dapat memanfaatkan penggunaan SubQueries:

select A.ID, A.Total, b.SB as AmountB, c.SC as AmountC, d.SD as AmountD
from A
  inner join (select ExtID, sum(Amount) as SB from B group by ExtID) b on A.ID = b.ExtID
  inner join (select ExtID, sum(Amount) as SC from C group by ExtID) c on c.ExtID = A.ID
  inner join (select ExtID, sum(Amount) as SD from D group by ExtID) d on d.ExtID = A.ID
person odiseh    schedule 20.02.2010
comment
Saya sangat menyukai pendekatan Anda. Bersih, sederhana... dan berhasil! Terima kasih .. tapi saya masih membenci SQL :P - person Ignacio Soler Garcia; 20.02.2010

Dari uraian Anda, kueri ini akan memberi Anda kesalahan karena Anda menggunakan kolom dbo.A.Amount yang tidak ada di grup Anda. Mengubah ini menjadi dbo.A.Total mungkin yang Anda perlukan.

Jika Anda memerlukan semua jumlahnya bersama-sama, cobalah kueri ini:

select A.Id, A.Total, sum(B.Amount + C.Amount + D.Amount) AS Total_Amount
from A
  inner join B on A.Id = B.ExtId
  inner join C on A.Id = C.ExtId
  inner join D on A.Id = D.ExtId
group by A.Id, A.Total;
person a'r    schedule 20.02.2010
comment
Ini adalah jawaban terbaik, karena kueri ini akan bekerja lebih cepat karena dapat dioptimalkan oleh SQL Server karena tidak berisi kueri bersarang. - person Mohamed Nagieb; 07.02.2021

Yang ini juga berfungsi dengan baik

SELECT (SELECT SUM(Amount) FROM TableA) AS AmountA, (SELECT SUM(Amount) FROM TableB) AS AmountB, (SELECT SUM(Amount) FROM TableC) AS AmountC, (SELECT SUM(Amount) FROM TableD) AS AmountD

person Jahson kyalo    schedule 20.05.2016

Ini mungkin membantu pengguna lain.

SELECT Total=(Select Sum(Amount) from table a)+(Select Sum(Amount) from table b)+(Select Sum(Amount) from table c)
person user3127648    schedule 07.01.2016

Coba kode ini SELECT Total=isnull((Select Sum(Isnull(Jumlah,0)) dari tabel a),0)+isnull((Pilih Sum(isnull(Jumlah,0)) dari tabel b),0)+isnull( (Pilih Jumlah(isnull(Jumlah,0)) dari tabel c),0)

person mitul    schedule 27.12.2017