1

试图理解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 
4

3 回答 3

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
于 2015-08-04T10:29:53.087 回答
2

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

消息 8134,第 16 层,状态 1,第 1 行

遇到除以零错误。

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

无论如何,我想这是错误value / 00。我更喜欢以下检查:

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

因为它更短并返回NULL

于 2015-08-04T10:37:53.270 回答
0

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

于 2015-08-04T10:32:04.263 回答