तो क्या हो रहा है यह देखने के लिए पहला कदम एसयूएम को हटाना है और केवल लेनदेन राशि और दावा राशि का चयन करना है। इस तरह आप देख सकते हैं कि कौन सा डेटा लौटाया जा रहा है। आप देखेंगे कि A/2007 में शामिल होने पर लेन-देन की राशि दो बार होगी, क्योंकि यह दावा तालिका में प्रत्येक पंक्ति में शामिल हो रही है।
एक समाधान सबक्वेरी का उपयोग करना है, जैसा कि आपने कहा, शामिल होने से पहले एसयूएम अलग से करना।
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