我正在使用SQL Server 2008。我有两个表Tab1
和Tab2
,我想用条件(非null)从Tab1
中计算Tab2
中的行数。
我尝试了这个查询:
Select count(H.ID)
From Tab1 H
Join Tab2 A On A.Compte = H.charging_Id
Where A.FLAG IS NULL
但是这个查询没有返回正确的值。
发布于 2016-02-23 14:30:55
您缺乏对连接对数据的影响的理解。Tab2可能与表1存在一对多的关系。因此,当您连接到它时,您会增加返回的记录数。如果我理解正确的话,您想要的是tab1中所有在tabl2中没有相关记录的记录的计数。在这种情况下,not exists是您想要使用的。
Select count(H.ID)
from Tab1 H
where not exists (select * from Tab2
where Compte = H.charging_Id )
发布于 2016-02-23 14:30:59
Select count(H.ID)
From Tab1 H
Join Tab2 A On A.Compte = H.charging_Id And A.FLAG IS NOT NULL
如果我没理解错的话,你的内部连接将不会包含第二个表的空值。
发布于 2016-02-23 17:44:57
从您的问题和评论(需要表1的计数;表1的compte id等于表2的chargingid),您只需将“null”修改为“NOT null”,以防您在table1或2中有NULL值,也包含了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
希望这能有所帮助
https://stackoverflow.com/questions/35579997
复制相似问题