При запуске скрипта я получаю «делить на ноль» в SQL - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь запустить скрипт на SQL, в котором делю, но получаю ошибку «Ошибка деления на ноль»

Я пытался добавить NULLIF, который был предложен в старом посте.прочитал, но это не помогло.

SELECT SUM([SE Gross]) AS [Donors Gross],
       ROUND((SUM([Cancelled]) * 100) / NULLIF(SUM([SE Gross]), 2), 0),
       SUM([Venue Cost]),
       SUM([Accom/Expenses]),
       ROUND(SUM([SE Gross]) / NULLIF(SUM([fundraising days]), 2), 0) AS Column1,
       ROUND(SUM([Venue Cost]) / NULLIF(SUM([SE Gross]), 2), 0) AS Column2,
       ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([SE Gross]), 2), 0) AS column3,
       ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([donor net COUNT]), 2), 0) AS column4
FROM dbo.TEST1;

В настоящее время я получаю следующий результат: ошибка деления на ноль.

Ответы [ 2 ]

4 голосов
/ 24 мая 2019

Вы пытаетесь преобразовать в NULL, если оно равно 2. Проверьте эту часть: NULLIF(SUM([SE Gross]), 2), вам нужно изменить 2 на 0 в следующем:

SELECT SUM([SE Gross]) AS [Donors Gross],
       ROUND((SUM([Cancelled]) * 100) / NULLIF(SUM([SE Gross]), 0), 0),
       SUM([Venue Cost]),
       SUM([Accom/Expenses]),
       ROUND(SUM([SE Gross]) / NULLIF(SUM([fundraising days]), 0), 0) AS Column1,
       ROUND(SUM([Venue Cost]) / NULLIF(SUM([SE Gross]), 0), 0) AS Column2,
       ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([SE Gross]), 0), 0) AS column3,
       ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([donor net COUNT]), 0), 0) AS column4
FROM dbo.TEST1;

Кроме того, вы можете использовать оператор CASE, чтобы избежать нуля всей записи, если divider = 0, в следующем:

CASE WHEN NULLIF(SUM([SE Gross]), 0) = 0 THEN 1 ELSE NULLIF(SUM([SE Gross]), 0) END

Или объединить ISNULL с NULLIF в следующем:

ISNULL(NULLIF(SUM([SE Gross]), 0), 1)

Я предполагаю, что вы хотели округлить до 2 десятичных знаков, поэтому в этом случае это должно быть так:

ROUND((SUM([Cancelled]) * 100) / ISNULL(NULLIF(SUM([SE Gross]), 0), 1), 2)
0 голосов
/ 24 мая 2019

Просто чтобы исправить мой предыдущий ответ - следует использовать CASE:

SELECT SUM([SE Gross]) AS [Donors Gross],
       CASE WHEN SUM([SE Gross]<>0 THEN ROUND((SUM([Cancelled]) * 100) / NULLIF(SUM([SE Gross]), 2), 0) ELSE 0 END,
       SUM([Venue Cost]),
       SUM([Accom/Expenses]),
       CASE WHEN SUM([fundraising days] <> 0 THEN ROUND(SUM([SE Gross]) / NULLIF(SUM([fundraising days]), 2), 0) ELSE 0 END AS Column1,
       CASE WHEN SUM([SE Gross] <> 0 THEN ROUND(SUM([Venue Cost]) / NULLIF(SUM([SE Gross]), 2), 0) ELSE 0 END AS Column2,
       CASE WHEN SUM([SE Gross] <> 0 THEN ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([SE Gross]), 2), 0) ELSE 0 END AS column3,
       CASE WHEN SUM([donor net COUNT] <> 0 THEN ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([donor net COUNT]), 2), 0) ELSE 0 END AS column4
FROM dbo.TEST1;

Это должно работать сейчас:)

Вы также можете удалить NULLIF, если это необходимо (я оставил их, так как я делаюне знаю, могут ли они понадобиться для разных целей)

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