使用Oracle11g:
如果列为null,我希望排除列上的算术。
在这种情况下,如何获得lag_diff for seqno=1 to null
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发布于 2013-02-20 20:30:04
将您的情况更改为:
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 seqnohttps://stackoverflow.com/questions/14989193
复制相似问题