2013-03-27 69 views
0

我有以下兩個查詢下面,總是回來不同的結果,但我在每個查詢以相同的方式添加總和。爲什麼總回來不同?SQL查詢總結帶來不同的結果

select [Total Children] = (SUM(demo.NumberOfPreschoolers) + SUM(demo.NumberOfToddlers) + SUM(demo.NumberOfInfants)), 
County = co.Description 
from ClassroomDemographics as demo 
inner join Classrooms as c on demo.Classroom_Id = c.Id 
inner join Sites as s on c.Site_Id = s.Id 
inner join Profiles as p on s.Profile_Id = p.Id 
inner join Dictionary.Counties as co on p.County_Id = co.Id 
where co.Description = 'MyCounty' 
Group By co.Description 


select [Number Of DLL Children] = SUM(cd.NumberOfLanguageSpeakers), 
[Total Children] = (SUM(demo.NumberOfPreschoolers) + SUM(demo.NumberOfToddlers) + SUM(demo.NumberOfInfants)), 
County = co.Description 
from ClassroomDLL as cd 
inner join Classrooms as c on cd.Classroom_Id = c.Id 
inner join Sites as s on c.Site_Id = s.Id 
inner join Profiles as p on s.Profile_Id = p.Id 
inner join Dictionary.Counties as co on p.County_Id = co.Id 
inner join ClassroomDemographics as demo on c.Id = demo.Classroom_Id 
where co.Description = 'MyCounty' 
Group by co.Description 
+1

請注意,第二個查詢有一個額外的內部聯接。兩個結果集中的行數是否相等? – cdlong 2013-03-27 15:31:47

+0

每個結果集中只有一行,第二個查詢有三列信息,第一個查詢只有兩列信息。額外的內部連接應該在第二個查詢中,因爲我需要額外的信息列。 – user1220099 2013-03-27 15:33:19

+0

對不起,只是爲了澄清,你是否曾嘗試在兩個查詢上運行原始選擇(沒有聚合),並驗證結果集具有相同數量的記錄。基本上只是詢問@Brandon Moretz的回答如下。 – cdlong 2013-03-27 15:34:41

回答

0

只是一個快速瀏覽一下這兩個querties中,我推測是:

inner join ClassroomDemographics as demo on c.Id = demo.Classroom_Id 

中不計成績是在第一個查詢的第二個查詢,爲此彙總值會有所不同。

+0

該連接在兩個查詢中(雖然在不同的地方,並且連接以相反的方式構建,所以難以比較兩者)。我認爲第二個查詢中'ClassroomDLL'的連接實際上是排除結果的連接。 – Stainy 2013-03-27 16:09:13

0

您加入到Classrooms表正與第二個查詢中的附加表連接。

查詢1:

from ClassroomDemographics as demo 
inner join Classrooms as c on demo.Classroom_Id = c.Id 

問題2:

from ClassroomDLL as cd 
inner join Classrooms as c on cd.Classroom_Id = c.Id 
... 
inner join ClassroomDemographics as demo on c.Id = demo.Classroom_Id 

我的賭注是,ClassroomDLL表中有較少的數據,或者具有帶有用於連接標準中的一個空行,其中任何一項都可以排除結果中的行並拋出您的總計總計。