Проблемът може да се дължи на декартов резултат от вашите данни и сумирания. Само за изясняване, ето една проста заявка... Знам, че нямам всичко, нито съединявам колони перфектно, това е само за пояснение.
СЪЩО ЗНАМ, че съкратих колоните и псевдоними за опростено четене и разбиране на концепцията за това, което вероятно срещате.
Select
t1.yr,
sum( t2.Amt ) as AmtChange
FROM
budget AS t1
LEFT JOIN Budget_Changes AS t2
on t1.yr = t2.Yr
В крайна сметка няма проблем... за дадена година ще получите общите суми от втората таблица. В таблица 2 има много записи. Например:Данни
Budget
Yr
2013
2014
Budget_Changes
Yr Amt
2013 10
2013 20
2013 30
2014 40
2014 50
Your results would be
Yr AmtChange
2013 60
2014 90
Вероятно сме съгласни с това в този момент... Сега, добавете друга таблица, която на година (или каквото и да е), която също има множество записи годишно...
Change_Orders
Yr COAmt
2013 100
2013 120
2014 200
2014 220
И вие добавяте това като вторично ляво присъединяване към вашата заявка, нещо като
Select
t1.yr,
sum( t2.Amt ) as AmtChange,
sum( t3.COAmt ) as COAmtChange
FROM
budget AS t1
LEFT JOIN Budget_Changes AS t2
on t1.yr = t2.Yr
LEFT JOIN Change_Orders AS t3
on t1.yr = t3.Yr
Your might expect the results to be
Yr AmtChange COChangeAmt
2013 60 220
2014 90 420
Въпреки това, тъй като това е декартов резултат... множество редове за всяко присъединяване приема резултатите ПЪТИ всеки запис, който съществува в другата таблица... нещо като
Yr AmtChange COChangeAmt
2013 120 440
2014 180 840
За да коригирате това, всяка отделна таблица, от която получавате междинни суми, трябва да се обработва самостоятелно и да се групира по собствената си година, така че подмножеството да връща само един ред на контекст от данни. Нещо като
Select
t1.yr,
t2.AmtChange,
t3.COAmtChange
FROM
budget AS t1
LEFT JOIN ( select BC.Yr, sum( BC.Amt ) as AmtChange
from Budget_Changes BC
group by BC.Yr ) t2
on t1.yr = t2.Yr
LEFT JOIN ( select CO.Yr, sum( CO.COAmt ) as COAmtChange
from Change_Orders CO
group by CO.Yr ) AS t3
on t1.yr = t3.Yr
Така че всяка от подзаявките ще върне само 1 запис за съответната година, която се обобщава и по този начин ще предотврати дублирането на суми sum().