1

我有一个查询,在子查询中通过将两列相除来计算金额。我得到这个错误,我被零除,但实际上我没有 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

当我运行这个查询时(我只用'---'连接两个值)

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 回答