Count(*)返回null

时间:2010-11-06 23:26:34

标签: sql tsql sql-server-2008

我有通话详情记录表。每行都有UserIdUserBNumber

我还有UserIdNumber的表格,以便我可以说出用户的ID是什么。

因此,从每个CDR记录中我可以说出一个呼叫接听电话的人的ID是什么。

有时用户拨打的号码不在我的用户数据库中(在网络外呼叫)

现在我想查询给我UserAId(caller), UserBId(receiver), count(*)

这样我就可以知道用户之间的连接数。

UserAId, UserBId, NumberOfConnections

如果接听电话的号码不在我的表中,则UserA会呼叫网络外的某人。

我希望得到结果:

UserAId, NULL, NumberOfConnectionsOutsideTheNetwork

这是我的查询:

TableA: CDR Table
TableB: User -> Number table

select A.UserId, B.UserId, count(*)
from select tableA A 
left outer join tableB B
on A.UserBNumber = B.Number
group by A.UserId, B.UserId   

问题是I Count(*)有时会返回NULL。

我做错了什么?

3 个答案:

答案 0 :(得分:4)

您的查询在尝试执行计数时正在执行外部联接。如果B.UserId列为NULL,则count(*)也将返回NULL。您可以通过使用“count(A。*)”或将其包装在ISNULL()中显式执行A计数来解决此问题。

select A.UserId, B.UserId, count(A.*)
  from select tableA A 
  left outer join tableB B
    on A.UserBNumber = B.Number
 group by A.UserId, B.UserId   

select A.UserId, B.UserId, isnull(count(*),0)
  from select tableA A 
  left outer join tableB B
    on A.UserBNumber = B.Number
 group by A.UserId, B.UserId   

答案 1 :(得分:1)

select A.UserId, COALESCE(B.UserId,'NumberOfConnectionsOutsideTheNetwork') AS UserId_B, count(*)
from select tableA A 
left outer join tableB B
on A.UserBNumber = B.Number
group by A.UserId, COALESCE(B.UserId,'NumberOfConnectionsOutsideTheNetwork')  

尝试一下 - 你永远不会以这种方式归零。

答案 2 :(得分:0)

很抱歉这个问题。我也有ID列,不知道(不知道为什么我确定我设置这个:)没有设置为身份ON。

然后查询将第一个值作为ID插入。

问题解决了,我无法想象count(*)可以返回NULL