2

この SQL クエリを起動すると、ゼロ除算エラーが発生します。

SELECT CONVERT(VARCHAR(11),CaptureTime,106) 'CaptureTime',
        Type,
        CASE WHEN Unit='g/L' THEN (data1* 0.02586) ELSE data1 END As data1,
        CASE WHEN Unit='g/L' THEN nullif(data2* 0.02586,0) ELSE data2 END As data2,
        CASE WHEN Unit='g/L' THEN nullif(data3* 0.02586,0) ELSE data3 END As data3,
        CASE WHEN Unit='g/L' THEN nullif(data1* 0.02586,0) / nullif(data2* 0.02586,0) ELSE (data1/data2) END As Ratio,
        CASE WHEN Unit='g/L' THEN 'ml/L' ELSE 'ml/L' END As data,
        CASE WHEN Unit='g/L' THEN (data4* 0.01129) ELSE data4 END As data4
FROM something 
where Type ='DATA'
and ID='" + Session["name"].ToString() + "'
Order By CONVERT(DateTime, CaptureTime,101) DESC
4

2 に答える 2

3

エラーはほぼ確実にここの2行目から発生しています。

CASE WHEN Unit='g/L' THEN nullif(data1* 0.02586,0) / nullif(data2* 0.02586,0) " +
    "ELSE (data1/data2)" +  
    "END As Ratio,"

単位がG/Lでなく、data2が0の場合、エラーが発生します。次のように変更します。

CASE WHEN Unit='g/L' THEN nullif(data1* 0.02586,0) / nullif(data2* 0.02586,0) " +
    "ELSE (data1/NULLIF(data2, 0))" +  
    "END As Ratio,"
于 2012-10-30T09:56:14.733 に答える
0

data2がゼロに等しい場合、比率を計算することはできません。ゼロで除算できないため、常にエラーメッセージが出力されます。

ケースを追加することをお勧めします:

CASE WHEN data2=0 
THEN 0
ELSE
    CASE WHEN Unit='g/L' 
    THEN (data1 * 0.02586) / (data2 * 0.02586) 
    ELSE data1/data2
    END 
END As Ratio,
于 2012-10-30T09:53:35.787 に答える