SELECT
   E.MTRL_INV_NUM + E.MTRL_DSCD_SCHD_NUM    AS   FREND_STK_NUM
FROM
   DRT_MTRL_STK      E 
 , DRM_MTRL          F 
WHERE
   E.MTRL_CD = F.MTRL_CD 
AND E.YR_MNTH = 200707
AND F.DEL_FLG = 0 
AND(    1 = 0
    OR((1 = 1 
        AND E.LSS_PCT_LESS_MTRL_USE_RSLT_NUM <> 0 
        AND ROUND((E.LSS_PCT_LESS_THRY_STCK_NUM - 
                   E.MTRL_INV_NUM - 
                   E.MTRL_STCK_ADJ_NUM) / 
                   E.LSS_PCT_LESS_MTRL_USE_RSLT_NUM * 100, 2) <= 3
                  ))
     OR (1 = 1 
        AND E.LSS_PCT_LESS_MTRL_USE_RSLT_NUM <> 0                    
        AND ROUND((E.LSS_PCT_LESS_THRY_STCK_NUM - 
                   E.MTRL_INV_NUM - 
                   E.MTRL_STCK_ADJ_NUM) / 
                   E.LSS_PCT_LESS_MTRL_USE_RSLT_NUM * 100, 2) >= 4)
                OR (1 = 1 AND E.MTRL_DSCD_SCHD_NUM <> 0)
                OR (1 = 1 AND F.MTRL_CD = 1)
                OR (1 = 1 AND E.MTRL_STCK_ADJ_NUM <> 0)
                OR (1 = 1 AND E.SMPL_RSLT_NUM <> 0)
                OR (1 = 1 AND E.MTRL_RET_RSLT_NUM <> 0)
                OR (1 = 1 AND E.MTRL_INV_RMRK IS NOT NULL)
              )
当除数E.LSS_PCT_LESS_MTRL_USE_RSLT_NUM为0时,为什么还会去执行下面的ROUND处理,我把下面的其中一个条件F.MTRL_CD = 1改成E.MTRL_CD = 1就不会报除数为0得错误。不知道是什么原因,请高人帮忙解释一下。

解决方案 »

  1.   

    将两个用到除法的和<>0那个用括号括到一起试试.如:
    (E.LSS_PCT_LESS_MTRL_USE_RSLT_NUM <> 0 
            AND ROUND((E.LSS_PCT_LESS_THRY_STCK_NUM - 
                       E.MTRL_INV_NUM - 
                       E.MTRL_STCK_ADJ_NUM) / 
                       E.LSS_PCT_LESS_MTRL_USE_RSLT_NUM * 100, 2) <= 3
                      )))