Что означает СЛУЧАЙНАЯ СУММА (total_of_A), КОГДА 0 ТОГДА 0 ПОЛНАЯ СУММА (B) / SUM(total_of_A) END

Пытаясь понять CASE (Transact-SQL) выражение, но в итоге получилось много путаницы. Может ли кто-нибудь объяснить следующее утверждение простыми словами?

CASE SUM(total_of_A) WHEN 0 THEN 0 ELSE SUM(B) / SUM(total_of_A) END;

Я прочитал следующее, но это не устраняет путаницу

CASE input_expression 
    WHEN when_expression THEN result_expression [ ...n ] 
[ELSE else_result_expression ] 
END 

3 ответа

Решение

Это значит

подсчитывать SUM(B) / SUM(total_of_A) только если сумма total_of_A не является 0 потому что это приведет к делению на ноль исключений.

Работает так

case <check SUM(total_of_A)>
     when <result of check is 0?>
     then <output 0>
     else <output the result of SUM(B) / SUM(total_of_A)>
end

В SQL Server деление на ноль вызывает следующую ошибку:

Msg 8134, уровень 16, состояние 1, строка 1

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

Итак case statement использование для избежания таких случаев.

Во всяком случае, я думаю, что это неправильно, как value / 0 не является 0, Мне больше нравится следующий чек:

SUM(B) / NULLIF(SUM(total_of_A), 0)

как короче и возвращается NULL вместо.

Это читается следующим образом: если сумма столбца с именем total_of_A равна 0, то результатом этого оператора case является 0, в противном случае результатом этого оператора case является сумма столбца с именем b, деленная на сумму столбца с именем total_of_A

Другие вопросы по тегам