首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止对空值的算术?

如何防止对空值的算术?
EN

Stack Overflow用户
提问于 2013-02-20 20:22:35
回答 1查看 151关注 0票数 0

使用Oracle11g:

如果列为null,我希望排除列上的算术。

在这种情况下,如何获得lag_diff for seqno=1 to null

代码语言:javascript
复制
   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

期望结果

代码语言:javascript
复制
  SEQNO  SET_A LAG_VAL LAG_DIFF
  ----------------------------
  1       10  <NULL>   <null>
  2       10   10       AAA
  3       20   10       BBB
  4       30   20       BBB
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 20:30:04

将您的情况更改为:

代码语言:javascript
复制
 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14989193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档