0

Oracle11gの使用:

列がnullの場合、列の算術演算を除外したいと思います。

この場合、seqno = 1のlag_diffnullにするにはどうすればよいですか?

   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
4

1 に答える 1

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
于 2013-02-20T20:30:04.580 に答える