Count (*) возвращает ноль - PullRequest
       7

Count (*) возвращает ноль

3 голосов
/ 07 ноября 2010

У меня есть таблица записей сведений о звонке.В каждой строке есть UserId и UserBNumber.

У меня также есть таблица, в которой есть UserId и Number, поэтому, имея номер, я могу сказать, что такое ID пользователя.

Так, чтобы из каждой записи CDR я мог сказать, что является идентификатором того, кто звонит тому, кто принимает вызов.

Иногда пользователь звонит на номер, которого нет в моей базе данных пользователей (звонки вне сети)

Теперь я хотел бы получить запрос, который дает мне UserAId(caller), UserBId(receiver), count(*)

, чтобы я мог знать количество соединений между пользователями.

UserAId, UserBId, NumberOfConnections

Если номер, который принимает вызов, нев моей таблице пользователь А звонит кому-то за пределами сети.

Я хотел бы получить результаты:

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   

проблема в том,что я считаю (*) иногда возвращает NULL.

Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 07 ноября 2010

Ваш запрос выполняет внешнее объединение при попытке выполнить подсчет. Если B.UserId указан как NULL, то count (*) также вернет NULL. Это можно исправить, явно выполнив подсчет A, используя «count (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   
1 голос
/ 07 ноября 2010
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')  

Попробуйте - вы никогда не будете группировать по нулю таким образом.

0 голосов
/ 07 ноября 2010

Хорошо, извините за эту проблему. У меня был также столбец идентификатора, который не был (не знаю, почему я уверен, что я установил это :) не был установлен на идентичность ВКЛ.

Затем запрос вставлял первое значение как идентификатор.

Проблема решена, и я не могу представить, что count (*) может вернуть NULL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...