2011-08-04 1 views
4
SELECT ((CASE WHEN (qid2.AgeBelow_16 - qid1.AgeBelow_16)= 0 THEN 1 ELSE (qid2.AgeBelow_16- qid1.AgeBelow_16) END)/ (CASE WHEN [qid1].AgeBelow_16= 0 THEN 1 ELSE [qid1].AgeBelow_16 END))*100 AS AgeBelow_16_Percent, 
    -- otherfields 

    FROM 
    -- whole query 

上記のクエリを使用して、古い値と新しい値とのパーセント差を計算しています。主な問題はそこにありますフィールド値が0の場合、「ゼロでエラーが発生しました。エラーが発生しました」というメッセージが表示されるので、ケースを使用していた場合は、を終了します。上記の実装は良いですか、これより良い書き込みができますか?これは、フィールドが10以上のような巨大なフィールドは、より混乱しているので、私に提案してください。ハンドル「ゼロエラーでエラーが発生しました」エラー

答えて

4

これはおそらく何か?

declare @X int = 0 
select 10/isnull(nullif(@X, 0), 1) 
+0

パフォーマンスは優れていますか? –

+1

@Govind KamalaPrakash Malviya:必ずしもそうではなく、そうでなければ、違いは本質的ではないと思います。しかし、おそらく自分でそれをベンチマークするべきです。代わりに、ISNULLの代わりにCOALESCEを使用して、より良い(より速く)動作するかどうかを確認することもできます。 –

+0

@Govind - 本当に遅いラップトップとAndriyの100000行のクイックテストを正しく実行しましたか?約50msの時間差で2.7秒かかった。 –

関連する問題