Вы пытаетесь преобразовать в 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)