为什么在SELF JOIN中使用COUNT会产生不同的结果值

时间:2016-09-12 23:24:16

标签: tsql join count

有人可以解释一下为什么如果我使用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

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的总和而不会分解每一行吗? 谢谢

1 个答案:

答案 0 :(得分: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具有相同lstlines的所有行。与//$("#read-more").click(function() { // $(".overlay").show(); //});匹配的人。