Problemet kan bero på ett kartesiskt resultat av dina data och summeringar som pågår. Bara för att förtydliga, här är en enkel fråga... Jag vet att jag inte har allt, och inte heller går det perfekta med kolumner, detta är bara för att förtydliga.
JAG VET OCKSÅ att jag har förkortat kolumnerna och aliasen för att förenkla läsning och förståelse av begreppet vad du förmodligen stöter på.
Select
t1.yr,
sum( t2.Amt ) as AmtChange
FROM
budget AS t1
LEFT JOIN Budget_Changes AS t2
on t1.yr = t2.Yr
I slutet, inga problem... för ett givet år får du totalsummorna från den andra tabellen. Det finns många poster i tabell 2. Ex:Data
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
Vi är förmodligen överens om det vid det här laget... Lägg nu in en annan tabell som per år (eller vad som helst), som också har flera rekord per år...
Change_Orders
Yr COAmt
2013 100
2013 120
2014 200
2014 220
Och du lägger till detta som en sekundär vänsterkoppling till din fråga, ungefär som
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
Men eftersom det är ett kartesiskt resultat... tar flera rader per varje koppling resultaten GÅNGER varje post som finns i den andra tabellen... ungefär som
Yr AmtChange COChangeAmt
2013 120 440
2014 180 840
För att fixa detta bör varje enskild tabell du får delsummor från hanteras för sig och grupperas efter sitt eget år så att delmängden endast returnerar en rad per datakontext. Något liknande
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
Så underfrågorna returnerar var och en endast en post för respektive år som aggregeras och förhindrar därmed dubbletter i sum()-belopp.