2014-10-02 58 views
0

我有這個查詢,當數據被加載到這個表時,我得到錯誤,並且除數是零,這是b。 living_units專欄。我想知道如果我可以做某種嘗試捕捉,或者如果它的零顯示爲空而不是失敗或某些有助於不出錯的東西?除數在sql中等於零需要添加某種try catch

SELECT a.SERVICE_TYPE_GRP, 
     a.HSIA_TYPE, 
     a.STAT_DYN_IND, 
     a.VIDEO_IND, 
     a.VOICE_IND, 
     a.CUST_CNT, 
     b.LIVING_UNIT_CNT, 
     a.DT_MODIFIED, 
     a.CUST_CNT/b.LIVING_UNIT_CNT AS ALLRGN_TK_RT_PCT 
FROM ( SELECT lp.SERVICE_TYPE_GRP SERVICE_TYPE_GRP, 
       lp.HSIA_TYPE HSIA_TYPE, 
       lp.STAT_DYN_IND STAT_DYN_IND, 
       lp.VIDEO_IND VIDEO_IND, 
       lp.VOICE_IND VOICE_IND, 
       lp.DT_MODIFIED DT_MODIFIED, 
       SUM (lp.CUST_CNT) CUST_CNT 
      FROM RPT_SUBSCR_REGION_DTL lp 
     GROUP BY SERVICE_TYPE_GRP, 
       HSIA_TYPE, 
       STAT_DYN_IND, 
       VIDEO_IND, 
       VOICE_IND, 
       DT_MODIFIED) a, 
     ( SELECT DT_MODIFIED, SUM (LIVING_UNIT_CNT) LIVING_UNIT_CNT 
      FROM RPT_REGION_CUST_DTL 
      WHERE dt_modified = (SELECT dt_modified 
           FROM ls_dt_modified 
           WHERE NAME = 'RPT_REGION_CUST_DTL') 
     GROUP BY DT_MODIFIED) b 
WHERE a.DT_MODIFIED = b.DT_MODIFIED; 

我得到的錯誤是ORA-01476:除數等於零。

回答

2

嘗試case聲明:

case 
when b.LIVING_UNIT_CNT = 0 -- the divisor 
then 0 -- a default value 
else a.CUST_CNT/b.LIVING_UNIT_CNT 
end 
ALLRGN_TK_RT_PCT 
0

如果你有一個複雜的除數表達和NULL結果是可以接受的,有不需要重複除數表達一種替代方案:

a.CUST_CNT/nullif(b.LIVING_UNIT_CNT, 0) 

如果第一個參數等於第二個參數,則NULLIF函數返回NULL。在這種情況下,如果b.LIVING_UNIT_CNT等於零,則返回NULL。而且任何被NULL分開的東西也會變成NULL。這可能有點「詭計」,但它可以節省CASE語句的表達重複。