次のコードがあります。
CASE WHEN (1+sum(x)/sum(y)) >=0 and (1+sum(x)/sum(y)) < 0.5 Then 1 ELSE 0
x と y は列です。私の問題は、sum(y)
0になる可能性があり、0で割るエラーが発生することです。else 句でこのエラーをキャッチするにはどうすればよいですか。そのため、ify = 0 "ELSE 0"
がアクティブになります。
次のコードがあります。
CASE WHEN (1+sum(x)/sum(y)) >=0 and (1+sum(x)/sum(y)) < 0.5 Then 1 ELSE 0
x と y は列です。私の問題は、sum(y)
0になる可能性があり、0で割るエラーが発生することです。else 句でこのエラーをキャッチするにはどうすればよいですか。そのため、ify = 0 "ELSE 0"
がアクティブになります。
たぶんもう1つの条件?
CASE
WHEN sum(y)=0 then 0
WHEN (1+sum(x)/sum(y)) >=0 and (1+sum(x)/sum(y)) < 0.5 Then 1
ELSE 0
END
NullIf(sum(y), 0)
の代わりに式を使用してみてくださいsum(y)
:
select
CASE
WHEN (1+sum(x)/NullIf(sum(y), 0)) >=0
and (1+sum(x)/NullIf(sum(y), 0)) < 0.5 Then 1
ELSE 0
END
SQLFiddleサンプル
最初に分母がゼロかどうかを確認する必要があります はいの場合は数式を計算しないでください ゼロを返します そうでなければ数式を計算します
コード内:
CASE WHEN (1+sum(x)/sum(y)) >=0 and (1+sum(x)/sum(y)) < 0.5 Then 1
ELSE 0
次のように変更します。
CASE
WHEN SUM(isnull(y,0))=0 then 0
ELSE
CASE
WHEN (1+sum(x)/sum(y)) >=0 and (1+sum(x)/sum(y)) < 0.5
THEN 1
END
END AS [RESULT]
case when
sum(coalesce(y, 0)) <> 0
and (1+sum(x)/sum(coalesce(y, 0))) >= 0
and (1+sum(x)/sum(coalesce(y, 0))) < 0.5 then
1
else
0
end