2012-06-28 53 views
1

我有一個查詢,在子查詢計算金額除以兩列。我得到這個錯誤,我除零,但實際上我沒有0或NULL值。下面是該查詢:SQL除零

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 

當我運行此查詢(我只用串聯的兩個值 '---' 之間)

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

你能告訴的只是'選擇IznosIni,VrednostIni從輸出...' – mellamokb

+2

請註明您的DBMS的標籤(是甲骨文?) 。 –

+0

此查詢從plPlataF F1 SELECT IznosIni,VrednostIni \t \t 其中plPresmetka_id在 \t \t(從plPresmetka選擇plPresmetka_id其中f_vlezno = 1和KOD = '01' ) \t和f1.plPlataS_id IN(SELECT plPlataS_Id FROM DBO。 plPlataS WHERE plPlataH_Id = 171) 結果是 IznosIni \t VrednostIni 32414.00 168.00 \t 37613.00 168.00 \t 31341.00 168.00 \t 49148.00 \t 168.00 110507.00 \t 168.00 36601.00 \t 168.00 37895.00 \t 168.00 59699.00 \t 168.00 43978.00 \t 168.00 50991.00 \t 168.00 36601.00 \t 168.00 48087.00 \t 168.00 45921.00 \t 168.00 59499.00 \t 168.00 37613.00 \t 168.00 37613.00 \t 168.00 34850.00 \t 168.00 33632.00 \t 168.00 33632.00 \t 168.00 – user1489128

回答

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 
+0

由於現在的查詢工作正常:) – user1489128

+0

這是一個嚴肅的問題。爲什麼你會把它歸零,如果爲零,然後將其設回爲0? – user1166147

+0

我可以替換ISNULL((IznosIni/NULLIF(VrednostIni,1)),0) – user1489128

1

好像你的RDBMS正在評估師應用,其中過濾器前。這完全合法。

你需要警惕這種可能性是這樣的:

case when VrednostIni = 0 then null else ISNULL((IznosIni/VrednostIni),0 end