2015-08-04 2 views
1

Попытка понять выражение CASE (Transact-SQL), но в итоге возникло много путаницы. Может ли кто-нибудь объяснить следующее заявление простыми словами?Что делает CASE SUM (total_of_A) КОГДА 0 ТОГДА 0 ELSE SUM (B)/SUM (total_of_A) END означает

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

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

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

похоже, что кто-то пытается избежать деления на ноль. – Mark

+0

Когда сумма суммарного числа A равна 0, верните 0, если не 0, тогда возвратите сумму b по сумме общего числа – Mihai

ответ

2

Это означает

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

Он работает как этот

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 
0

Это гласит Если сумма столбца с именем total_of_A является 0, то результатом этого случая утверждения 0 еще результатом этого саз является суммой из столбец с именем Ь, деленное на сумму колонке под названием total_of_A

2

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

Msg 8134, Level 16, State 1, Line 1

Divide by zero error encountered.

Таким образом, case statement используется для предотвращения таких случаев.

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

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

, как он короче и возвращает NULL вместо этого.

Смежные вопросы