Jadi langkah pertama untuk melihat apa yang terjadi adalah menghapus SUM dan cukup pilih jumlah transaksi dan jumlah klaim. Dengan begitu Anda bisa melihat data apa yang dikembalikan. Anda akan melihat bahwa bergabung pada A/2007 akan memiliki jumlah transaksi dua kali, karena menggabungkan setiap baris ke tabel klaim.
Salah satu solusinya adalah menggunakan subkueri, seperti yang Anda katakan, untuk melakukan SUM secara terpisah sebelum bergabung.
SELECT
Transactions.Customer,
Transactions.Year,
SumTransaction,
SumClaim
FROM (
select Customer, Year, sum(Transaction Amount) SumTransaction
from Transactions
group by Customer, Year
) Transactions
LEFT JOIN (
select Customer, Year, sum(Claim Amount) sumClaim
from Claims
group by Customer, Year
) Claims
ON Claims.Customer = Transactions.Customer
AND Transactions.Year = Claims.Year
Solusi lain yang mungkin dengan batasan Anda:
SELECT
Transactions.Customer,
Transactions.Year,
SUM(Transaction Amount),
(SELECT SUM(Claim Amount) from Claims where Claims.Customer = Transactions.Customer and Claims.Year = Transactions.Year)
FROM
Transactions
GROUP BY
Customer, Year
Solusi ketiga yang mungkin!! Yang ini tidak memerlukan subquery apa pun! Lihat SQL Fiddle
select
t.Customer,
t.Year,
sum(distinct t.Amount),
sum(c.Amount)
from
Transactions t
left join Claims c
on t.Customer = c.Customer
and t.Year = c.year
group by
t.Customer,
t.Year