1

(Transact-SQL) 式を理解しようとしCASEましたが、多くの混乱が生じました。次の文を簡単な言葉で説明できる人はいますか?

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 / 0とにかく、そうではないので、これは間違っていると思い0ます。私は次のチェックがもっと好きです:

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 に答える