CASE SUM(total_of_A) WHEN 0 THEN 0 ELSE SUM(B) / SUM(total_of_A) END 是什么意思

What does CASE SUM(total_of_A) WHEN 0 THEN 0 ELSE SUM(B) / SUM(total_of_A) END mean

试图理解 CASE (Transact-SQL) 表达式,但结果却很混乱。任何人都可以用简单的话解释以下陈述吗?

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 

意思是

仅当 total_of_A 的总和不是 0 时才计算 SUM(B) / SUM(total_of_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

这读作 如果名为 total_of_A 的列的总和为 0,则此 case 语句的结果为 0 否则,此 case 语句的结果为名为 b 的列的总和除以名为 [=12= 的列的总和]

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)

因为它更短,所以 returns NULL 相反。