Tsql 为什么将计数与自联接一起使用会产生不同的结果值

Tsql 为什么将计数与自联接一起使用会产生不同的结果值,tsql,join,count,Tsql,Join,Count,有人能解释一下为什么我使用SELF-JOIN和COUNT,它会给出不同于使用COUNT命令的结果吗? 与ControlNo列相同的表。列中的值不是唯一的。 此查询提供总计数15586 select (Select COUNT(ControlNo) from tblQuotes Q1 where Q1.ControlNo = a.ControlNo ) QuotedTotal FROM

有人能解释一下为什么我使用SELF-JOIN和COUNT,它会给出不同于使用COUNT命令的结果吗? 与
ControlNo
列相同的表。列中的值不是唯一的。 此查询提供总计数
15586

    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

但是,如果我运行这个查询,它会给出
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

到底是什么改变了总量?为什么? 为什么我要使用第一个场景? 是否有任何方法可以修改第一个查询以获得
15586
的总和,而不按每行进行细分?
谢谢

这似乎是因为字段
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
中与与
lstlines
匹配的行具有相同
ControlNo
的所有行。如果您首先共享表结构,这将有所帮助。
ControlNo
是否为唯一字段?似乎在
tblQuotes
中有一些行共享
ControlNo
字段中的值,但并非所有行都与
lstlines
表连接。您是否需要同时计算这些值?列
ControlNo
不是唯一的,这可能就是结果不同的原因。很高兴能为您提供帮助。这些查询是否偶然返回与您的查询相同的数字?不,它们不会返回相同的数字。应该是这样的,对吗?不,我的意思是我的第一个查询返回15095,第二个查询返回15586,就像你的两个查询一样。哦,是的。是的。所以这一切都是正确的。再次感谢你的解释。