SELECT
                E.MTRL_INV_NUM + E.MTRL_DSCD_SCHD_NUM    AS   FREND_STK_NUM   
                ,E.LSS_PCT_LESS_MTRL_USE_RSLT_NUM
            FROM
                DRT_MTRL_STK      E 
              , DRM_MTRL          F
            WHERE  (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 F.MTRL_CD = '0'
当E.LSS_PCT_LESS_MTRL_USE_RSLT_NUM为0(除数为0)时,会报除数为0得错误,
但把后面那个条件F.MTRL_CD = '0'改成E.MTRL_CD = '0'就不会报除数为0得错误,不知道是为什么?

解决方案 »

  1.   

    应该把                  , 2) <= 3)    最后的括号
    放到
     OR F.MTRL_CD = '0'后面吧
      

  2.   

    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)
                  )