2014-11-11 1 views
0

Я создал следующий запросДеление на ноль Ошибка при использовании нескольких SUM

SELECT LPORGNAME 
,SUM(TOTALNoOFTRANSFERS) as TOTAL 
,SUM(TReads) AS TReads 
,ISNULL(ROUND(ISNULL(SUM(TReads),0)/CAST(SUM(TOTALNoOFTRANSFERS)AS FLOAT)*100,2),0) 
FROM T_SPID_TRANSFER_IVSO 
WHERE DM_FISC_YEAR = '2014-15' 
GROUP BY LPORGNAME, DM_FISC_YEAR 
ORDER BY LPORGNAME, DM_FISC_YEAR 

Но я бегом в divieded на ноль, как вы можете видеть, я попытался попытаться ISNULL путь, но это не работает. Как я могу это исправить?

EDIT В TOTALNoOFTRANSFERS является SUM Колонка, которая не позволяет NULLS так там всегда будет 0

EDIT Найден простой способ избежать всех 0-х. Добавление WHERE TOTALNoOFTRANSFERS> 0, избегает все 0 и все вместе

+1

Является ли сумма TOTALNOFTRANSFERS нулевой? Это может быть вашей проблемой. (Ваш внутренний IsNull действует на числитель, а не на знаменатель. Ваш внешний IsNull слишком поздно. Вам нужно будет проверить знаменатель.) – DeadZone

+0

@DeadZone Division by 'NULL' должен возвращать' NULL'. Только деление на фактическое нулевое значение должно приводить к делению на нулевую ошибку. –

+0

TOTALNoTransfers - ДРУГОЙ СУММА в таблице (например, col1 + col2 + col3). Но в этом запросе я должен получить процент столбца А в этом TOTALNoTransfers, этот столбец может иметь 0, если col1 + 2 + 3 = 0. – Blahwoo

ответ

1

В основном вы

SUM(TReads)/SUM(TOTALNoOFTRANSFERS)*100 

, которые могли бы быть, например,

3/0 

Деление на ноль не может быть вычислена. Подумайте о том, что должно отображаться тогда и сделать исключение. Нравится ли вам

case when SUM(TOTALNoOFTRANSFERS) = 0 
    then 0 
    else SUM(TReads)/SUM(TOTALNoOFTRANSFERS)*100 
end 
Смежные вопросы