1

サブクエリで2つの列を分割して金額を計算するクエリがあります。ゼロ除算があるというこのエラーが発生しますが、実際には0またはNULL値がありません。クエリは次のとおりです。

SELECT 
(SELECT ISNULL((IznosIni/VrednostIni),0)
from  plPlataF f1 
where plPresmetka_id in 
    (select plPresmetka_id from plPresmetka where f_vlezno=1 and Kod ='01') 
and f1.plPlataS_id=s.plPlataS_id) 
FROM plPlataS s 
WHERE plPlataH_Id = 171

このクエリを実行すると(2つの値を「---」で連結するだけです)

SELECT 
(SELECT CONVERT(NVARCHAR(20),IznosIni)+'---'+CONVERT(NVARCHAR(20),VrednostIni)
from  plPlataF f1 
where plPresmetka_id in 
    (select plPresmetka_id from plPresmetka where f_vlezno=1 and Kod ='01') 
and f1.plPlataS_id=s.plPlataS_id) 
FROM plPlataS s 
WHERE plPlataH_Id = 171

結果が出ます:

32414.00---168.00 
37613.00---168.00 
31341.00---168.00 
49148.00---168.00 
110507.00---168.00 
36601.00---168.00 
37895.00---168.00 
59699.00---168.00 
43978.00---168.00 
50991.00---168.00 
36601.00---168.00 
48087.00---168.00 
45921.00---168.00 
59499.00---168.00 
37613.00---168.00 
37613.00---168.00 
34850.00---168.00 
33632.00---168.00 
33632.00---168.00 

どこにも0はありません!!! 誰かが私が問題が何であるか理解できないのを手伝ってくれませんか。前もって感謝します。

4

2 に答える 2

2

を使用しているのでISNULL、これはTSQLだと思います。ゼロ除算の可能性については、常に除算を考慮する必要があります。これに使用できますNULLIF

SELECT 
(SELECT ISNULL((IznosIni/NULLIF(VrednostIni,0)),0)
from  plPlataF f1 
where plPresmetka_id in 
    (select plPresmetka_id from plPresmetka where f_vlezno=1 and Kod ='01') 
and f1.plPlataS_id=s.plPlataS_id) 
FROM plPlataS s 
WHERE plPlataH_Id = 171
于 2012-06-28T16:24:27.043 に答える
1

RDBMSは、whereフィルターを適用する前に除算を評価しているようです。これは完全に合法です。

このような可能性を防ぐ必要があります。

case when VrednostIni = 0 then null else ISNULL((IznosIni/VrednostIni),0 end
于 2012-06-28T16:26:03.273 に答える