Tsql 为什么将计数与自联接一起使用会产生不同的结果值
有人能解释一下为什么我使用SELF-JOIN和COUNT,它会给出不同于使用COUNT命令的结果吗? 与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
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,就像你的两个查询一样。哦,是的。是的。所以这一切都是正确的。再次感谢你的解释。