我有通话详情记录表。每行都有UserId
和UserBNumber
。
我还有UserId
和Number
的表格,以便我可以说出用户的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。
我做错了什么?
答案 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