2013-02-20 3 views
0

Oracle11g 사용 :null 값에서 산술 연산을 방지하는 방법은 무엇입니까?

열이 null 인 경우 열에 대한 산술을 제외하고 싶습니다. 이 경우

, 어떻게 lag_diff SEQNO에 대한 = 1로받을 수 있나요?

with detail_records as (
    select 1 seqno, 10 set_a from dual union all 
    select 2 seqno, 10 set_a from dual union all 
    select 3 seqno, 20 set_a from dual union all 
    select 4 seqno, 30 set_a from dual) 
    select seqno, 
      set_a, 
      lag_val, 
    case (lag_val - set_a) 
    when 0 then 'AAA' 
    else 'BBB' 
    end as lag_diff 
from (select seqno, 
     set_a, 
     lag(set_a,1) over (order by seqno) as lag_val  
    from detail_records) 
order by seqno 

원하는 결과

SEQNO SET_A LAG_VAL LAG_DIFF 
    ---------------------------- 
    1  10 <NULL> <null> 
    2  10 10  AAA 
    3  20 10  BBB 
    4  30 20  BBB 

답변

2

변화를 다음과 귀하의 경우 :

with detail_records as (
    select 1 seqno, 10 set_a from dual union all 
    select 2 seqno, 10 set_a from dual union all 
    select 3 seqno, 20 set_a from dual union all 
    select 4 seqno, 30 set_a from dual) 
    select seqno, 
      set_a, 
      lag_val, 
    case 
    when (lag_val - set_a) is null then null 
    when (lag_val - set_a) = 0 then 'AAA' 
    else 'BBB' 
    end as lag_diff 
from (select seqno, 
     set_a, 
     lag(set_a,1) over (order by seqno) as lag_val  
    from detail_records) 
order by seqno 
관련 문제