Så det första steget för att se vad som händer är att ta bort SUMMA och bara välja transaktionsbelopp och anspråksbelopp. På så sätt kan du se vilken data som returneras. Du kommer att se att anslutningen på A/2007 kommer att ha transaktionsbeloppet två gånger, eftersom det ansluter varje rad till skadetabellen.
En lösning är att använda subquerys, som du sa, för att göra SUM:arna separat innan du går med.
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
En annan möjlig lösning med tanke på dina begränsningar:
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
Tredje möjliga lösningen!! Den här kräver inga underfrågor! Se denna SQL-fiol
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