尝试理解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
答案 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的列的总和