3

次のコードがあります。

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"がアクティブになります。

4

4 に答える 4

2

たぶんもう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
于 2013-07-24T09:34:44.240 に答える
1

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サンプル

于 2013-07-24T09:31:05.000 に答える
0

最初に分母がゼロかどうかを確認する必要があります はいの場合は数式を計算しないでください ゼロを返します そうでなければ数式を計算します

コード内:

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]
于 2013-07-24T09:41:34.350 に答える
0
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
于 2013-07-24T09:32:50.467 に答える