Така че първата стъпка, за да видите какво се случва, е да премахнете SUM и просто да изберете сумата на транзакцията и сумата на иска. По този начин можете да видите какви данни се връщат. Ще видите, че присъединяването на A/2007 ще има сумата на транзакцията два пъти, тъй като се присъединява към всеки ред към таблицата с претенции.
Едно решение е да използвате подзаявки, както казахте, за да направите SUM отделно, преди да се присъедините.
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
Друго възможно решение предвид вашите ограничения:
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
Трето възможно решение!! Това не изисква никакви подзаявки! Вижте тази 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