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

时间:2015-08-04 10:28:08

标签: sql-server tsql case case-expression

尝试理解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 

3 个答案:

答案 0 :(得分:2)

这意味着

仅当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

答案 1 :(得分:2)

SQL Server除以零会导致以下错误:

  

Msg 8134,Level 16,State 1,Line 1

     

遇到零错误。

因此,case statement用于避免此类情况。

无论如何,我认为这是错误的,因为value / 0不是0。我更喜欢以下检查:

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

因为它更短并返回NULL

答案 2 :(得分:0)

这读为 如果名为total_of_A的列的总和为0,则此case语句的结果为0,否则此case语句的结果是名为b的列除以名为total_of_A的列的总和