如何避免SQL查询中的DIVIDE BY ZERO错误

jai*_*jai 9 sql oracle9i divide-by-zero

SELECT  YEAR, period, round((1- sum(rej_qty) / sum(recd_qty))*100, 0)   
 FROM   TAB_A
 WHERE  sid = '200'
 AND    sdid IN ('4750')
 AND
(
       (
          YEAR ='2011'
       AND    period IN('01_JAN')
       )
OR
       (
          YEAR = '2010'
       AND    period IN('02_FEB','03_MAR','04_APR','05_MAY','06_JUN','07_JUL','08_AUG','09_SEP','10_OCT','11_NOV','12_DEC')
       )
)
group by year, period
Run Code Online (Sandbox Code Playgroud)

对于特定月份,recd_qty为零,因为我得到了DIVIDE BY ZERO错误.

有什么方法可以避免DIVIDE BY ZERO错误吗?

我有什么方法可以忽略那个特定的月份?

vc *_* 74 9

如果要忽略此类记录,可以使用子查询

SELECT  YEAR, period, round((1- rej_sum / recd_sum)*100, 0) FROM
(
  SELECT YEAR, sum(rej_qty) rej_sum, sum(recd_qty) recd_sum
  FROM   TAB_A
  WHERE  sid = '200'
  AND    sdid IN ('4750')
  AND
  (
       (
          YEAR ='2011'
       AND    period IN('01_JAN')
       )
  OR
  (
      YEAR = '2010'
       AND    period IN ('02_FEB','03_MAR','04_APR','05_MAY','06_JUN','07_JUL','08_AUG','09_SEP','10_OCT','11_NOV','12_DEC')
       )
  )
  group by year, period
)
WHERE recd_sum <> 0;
Run Code Online (Sandbox Code Playgroud)

如果你想保留它们并通过零问题处理除法,你可以使用解码或大小写

SELECT  YEAR, period, DECODE(recd_qty, 0, NULL, round((1- sum(rej_qty) / sum(recd_qty))*100, 0)) 
Run Code Online (Sandbox Code Playgroud)