Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 当0然后0时,案例总和(A的总和)是什么意思?其他总和(B)/总和(A的总和)结束时意味着什么_Sql Server_Tsql_Case_Case Expression - Fatal编程技术网

Sql server 当0然后0时,案例总和(A的总和)是什么意思?其他总和(B)/总和(A的总和)结束时意味着什么

Sql server 当0然后0时,案例总和(A的总和)是什么意思?其他总和(B)/总和(A的总和)结束时意味着什么,sql-server,tsql,case,case-expression,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; 我明白了以下几点,但这并不能消除混乱 CASE input_expression WHEN when_expression THEN result_expression [ ...n ] [ELSE else_result_express

试图理解
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 
这意味着

只有当
total\u of A
的和不是
0
时,才计算
SUM(B)/SUM(total\u 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\u of A
的和不是
0
时,才计算
SUM(B)/SUM(total\u 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的列的和除以名为total_of_A的列的和,如下所示
如果名为total_of_A的列的和为0,则此case语句的结果为0,否则此case语句的结果为名为b的列的和除以SQL Server中名为total_of_A的列的和除以0会导致以下错误:

Msg 8134,16级,状态1,第1行

遇到被零除的错误

因此,
case语句
用于避免此类情况

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

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

因为它较短,并返回
NULL

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

Msg 8134,16级,状态1,第1行

遇到被零除的错误

因此,
case语句
用于避免此类情况

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

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

因为它较短,返回的是
NULL

这看起来像是有人试图避免被零除。当a的总和为0时,如果不是0,则返回0,然后返回b的总和超过a的总和。这看起来像是有人试图避免被零除。当a的总和为0时,返回0如果不是0,则返回b的总和超过a的总和