2016-09-12 25 views
1

有人可以解釋爲什麼如果我使用SELF JOIN和COUNT,它會給我不同的結果,而不僅僅是使用COUNT命令嗎? 與ControlNo同一列。列中的值不是唯一的。 此查詢給我總計數15586爲什麼使用COUNT和SELF JOIN給出不同的結果值

select (Select COUNT(ControlNo) 
       from tblQuotes Q1 
       where Q1.ControlNo = a.ControlNo 
      ) QuotedTotal 
    FROM tblQuotes a 
    inner join lstlines l on a.LineGUID = l.LineGUID 
    where l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016 

enter image description here

不過,如果我運行此查詢它給我的15095總計數。

select COUNT(ControlNo) as QuotedTotal 
from tblQuotes a 
inner join lstlines l on a.LineGUID = l.LineGUID 
    where  l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016 

enter image description here

究竟改變總量,爲什麼? 爲什麼我會使用第一種情況? 而且有什麼辦法可以修改第一個查詢來得到15586的總和而不會被每行破壞? 謝謝

+0

如果你首先共享表格結構將會有所幫助。 ControlNo是一個獨特的領域嗎?看起來'tblQuotes'中有一些行共享'ControlNo'字段中的值,但並不是所有的行都與'lstlines'表連接。你需要將這些數據計算在內嗎? – Andrew

+0

'ControlNo'列不是唯一的,這可能是結果不同的原因。 – Oleg

回答

1

這似乎是因爲現場ControlNo是不是唯一的,也有一些記錄共享該值,雖然不是所有的人都加入對lstlines表與條件。所以基本上你的最後一個查詢的作用:

SELECT COUNT(a.ControlNo) 
FROM lstlines l 
INNER JOIN tblQuotes a ON a.LineGUID = l.LineGUID 
WHERE l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016 

雖然第一個基本的作用:

SELECT COUNT(b.ControlNo) 
FROM lstlines l 
INNER JOIN tblQuotes a ON a.LineGUID = l.LineGUID 
INNER JOIN tblQuotes b ON a.ControlNo = b.ControlNo 
WHERE l.LineName = 'EARTHQUAKE' AND YEAR(EffectiveDate) = 2016 

正如你可以看到,在這第二個查詢你是不是隻計算匹配您lstlines表中的行,而且tblQuotes中的所有行與匹配的那些行有相同的ControlNo

+0

很高興能有所幫助。這些查詢偶然會返回與查詢相同的數字嗎? – Andrew

+0

不,他們不會返回相同的數字。那是怎麼回事,對嗎? – Oleg

+0

不,我的意思是我的第一個查詢返回15095和第二個15586,就像你的兩個查詢。 – Andrew

相關問題