我有通话详情记录表。每行都有 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
问题是我 Count(*) 有时会返回 NULL。
我做错了什么?
最佳答案
您的查询在尝试执行计数时正在执行外部联接。如果 B.UserId 被列为 NULL,那么 count(*) 也将返回 NULL。您可以通过使用“count (A.*)”显式执行 A 计数或将其包装在 ISNULL() 中来解决此问题。
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
关于sql - Count(*) 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4115710/