Ошибка деления на ноль при использовании группы по - PullRequest
0 голосов
/ 02 апреля 2019

В моем запросе приведен фрагмент кода ниже:

CAST(COUNT(C.DateChanged) * 100.0 / COUNT(A.LastPassedBackToSalesDate) AS numeric(18, 2)) AS PBTSbutActived

Оба поля имеют тип данных DateTime.Проблема в том, что когда я включаю группу с помощью приведенного выше фрагмента кода, выдается эта ошибка:

Ошибка деления на ноль.

Предупреждение: нулевое значение устраняется агрегатом или другимОперация SET.

Я прочитал некоторые темы здесь и попытался использовать это:

CAST(COUNT(NULLIF(C.DateChanged, 0)) * 100.0 / COUNT(NULLIF(A.LastPassedBackToSalesDate, 0)) AS numeric(18, 2)) AS PBTSbutActived

Однако, это не помогло, я все еще получаю ту же проблему, что и раньше.

Ответы [ 3 ]

4 голосов
/ 02 апреля 2019

NULLIF() выходит за пределы COUNT():

CAST(COUNT(C.DateChanged) * 100.0 /
           NULLIF(COUNT(A.LastPassedBackToSalesDate), 0) AS numeric(18, 2)
    ) AS PBTSbutActived

То есть вам нужно проверить результат из COUNT(),не учитывается столбец.

0 голосов
/ 02 апреля 2019

Другим вариантом будет использование оператора case,

CASE WHEN COUNT(A.LastPassedBackToSalesDate) <>0 then 
CAST(COUNT(C.DateChanged) * 100.0 / COUNT(A.LastPassedBackToSalesDate) AS numeric(18, 2)) 
ELSE NULL END AS PBTSbutActived
0 голосов
/ 02 апреля 2019

Если COUNT (A.LastPassedBackToSalesDate) равен 0, вы не можете избежать этой ошибки. Вы должны добавить предложение HAVING к вашему запросу:

CAST(COUNT(C.DateChanged) * 100.0 /
       NULLIF(COUNT(A.LastPassedBackToSalesDate), 0) AS numeric(18, 2)
) AS PBTSbutActived FROM .... GROUP BY ... HAVING COUNT(A.LastPassedBackToSalesDate) <> 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...