2017-09-02 12 views
0

SUM(NULLIF(V1 = V2))を使用しても安全ですか? 私の目的は、V1がすべての行に対してV2(両方ともヌル可能)かどうかを知ることです。これはグループ文でこれを使用しているので、これは私が思い付くことです。 これを達成する他の方法はありますか?Sql:SUM(NULLIF(V1 = V2))は可能ですか?

+1

[NULLIF](https://docs.microsoft.com/en-us/sql/t-sql/language- elements/nullif-transact-sql)もNullを返すことがあります。したがって、SUMが破壊されたり、不適切な結果をもたらす可能性があります。 –

+2

@Nobody SUMはnull値を無視すると思います。 – Broccoli

+0

私は 'SUM'が' NULL'を無視することは知らなかった。私はいつも 'SUM 'を行う前に' COALESCE'を使いました。しかし、[この投稿](https://stackoverflow.com/questions/37295336/is-it-safe-to-use-sum-without-isnull)を見てください。また、情報ありがとうございました:) –

答えて

0

SUMアグリゲーションの前には、COALESCEメソッドを使用する方が良いです。彼らはすべての行に対して等しい場合、あなたが行うことができます決定するため

+1

不要な機能を追加したので、そうではありません。可能な最終NULLを気にするならば、 'SUM(COALESCE(col、0))'の代わりに 'COALESCE(SUM(col))'を使うのが良いでしょう。前者はCOALESCEを1回実行し、後者は行ごとに1回実行します。 – dnoeth

0

select (1 - 
     max(case when v1 = v2 then 0 
       when v1 is null and v2 is null then 0 
       else 1 
      end) 
     ) as all_equal 
from t; 
関連する問題