2013-11-27 185 views
0

我有一个查询,我需要得到一个数字除以2列中的2个字段。Oracle除以零的错误

shelve.total_qty /(GREATEST(NVL(y.FORECAST_QUANTITY,0),NVL(z.sales,0))/ 7)作为Shelve_DOC

我得到的臭名昭著错误。

ORA-01476:除数为零 01476. 00000 - “除数为零” *原因:
*操作:

我看过周围,我需要一个CASE/IF但我'不知道如何..

任何帮助,将不胜感激。

+0

有使用NULLIF 一种巧妙的方法 http://stackoverflow.com/questions/861778/how-to-avoid-the-divide-by-zero-error-in-sql – edgar

回答

1
SELECT 
    CASE WHEN (GREATEST(NVL(y.FORECAST_QUANTITY, 0), NVL(z.sales, 0))/7) = 0 THEN null 
      ELSE shelve.total_qty/(GREATEST(NVL(y.FORECAST_QUANTITY, 0), NVL(z.sales, 0))/7) 
    END Shelve_DOC 
    FROM ... 
WHERE .... 

应该这样做。

+0

这完美地工作! – Spartacus38

1

像这样的东西?

CASE WHEN NVL(y.FORECAST_QUANTITY,0) <= 0 AND NVL(z.sales,0) <= 0 
    THEN NULL 
    ELSE shelve.total_qty/(GREATEST(NVL(y.FORECAST_QUANTITY, 0), NVL(z.sales, 0))/7) 
    END AS Shelve_DOC 
+0

这工作也很完美!很高兴我可以选择两个答案。 – Spartacus38