两个表的SQL Server计数与条件连接

时间:2016-02-23 14:20:29

标签: sql sql-server join

我正在使用SQL Server 2008.我有两个表Tab1Tab2,我想计算Tab1中列的条件(非空)的行数来自Tab2

我尝试了这个查询:

Select count(H.ID) 
From Tab1 H 
Join Tab2 A On A.Compte = H.charging_Id 
Where A.FLAG IS NULL

但是这个查询没有返回正确的值。

4 个答案:

答案 0 :(得分:0)

您所拥有的是对联接对数据的影响缺乏了解。 Tab2可能与表1的一对多关系。因此,当您加入它时,您会增加返回的记录数。如果我理解正确,您需要计算tab1中没有相关记录的所有记录。在这种情况下,你不想使用它。

Select count(H.ID) 
from   Tab1 H 
where not exists (select   * from Tab2 
    where Compte = H.charging_Id )

答案 1 :(得分:0)

Select count(H.ID) 
From Tab1 H 
Join Tab2 A On A.Compte = H.charging_Id And A.FLAG IS NOT NULL 

如果我理解正确,那么你的内连接将不包括第二个表的空值。

答案 2 :(得分:0)

从您的问题和评论(需要表1的计数; table1的compte id等于table2的chargeid)开始,您只需要将'NULL'修改为'NOT NULL',以防万一你有空值table1或2也包含了一个isnull条件:

Select count(H.ID) 
From Tab1 H 
Join Tab2 A On ISNULL(A.Compte,0) = ISNULL(H.charging_Id,0)
Where A.FLAG IS NOT NULL

希望这有帮助

答案 3 :(得分:0)

使用内部联接,如:

Select count(H.ID) 
From Tab1 H 
INNER Join Tab2 A On A.Compte = H.charging_Id 
Where A.FLAG IS NULL