Så det første skridt til at se, hvad der sker, er at fjerne SUMMER og bare vælge transaktionsbeløbet og kravbeløbet. På den måde kan du se, hvilke data der returneres. Du vil se, at sammenføjningen på A/2007 vil have transaktionsbeløbet to gange, da det føjer hver række til kravtabellen.
En løsning er at bruge underforespørgsler, som du sagde, til at lave SUM'erne separat før tilslutning.
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 anden mulig løsning givet dine begrænsninger:
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 mulig løsning!! Denne kræver ingen underforespørgsler! Se denne 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