我有一个查询,在子查询中通过划分两列来计算金额。我得到这个错误,我除了零,但实际上我没有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! 有人可以请帮助我不知道问题可能是什么。 提前谢谢。
答案 0 :(得分: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
答案 1 :(得分:1)
在应用where过滤器之前,您的RDBMS似乎正在评估除法。这完全合法。
你需要防范这种可能性:
case when VrednostIni = 0 then null else ISNULL((IznosIni/VrednostIni),0 end