我正在使用SQL Server 2008.我有两个表Tab1
和Tab2
,我想计算Tab1
中列的条件(非空)的行数来自Tab2
。
我尝试了这个查询:
Select count(H.ID)
From Tab1 H
Join Tab2 A On A.Compte = H.charging_Id
Where A.FLAG IS NULL
但是这个查询没有返回正确的值。
答案 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