在Oracle8i,如何用SQL语句实现:查询某字段的下一行记录值减上一行记录值的差?
如有表如下:
   单位编号        收入
````````````````````````````````
   001             5000
   002             6000
   003             5600
   ...想得到如下:
  单位编号         差         
````````````````````````````````
   001             5000    //头行记录为原值
   002             1000    //6000-5000=1000
   003             -400    //5600-6000=-400
   ...用PL SQL、游标逐行处理可以,现在想用SQL语句实现,该怎么办?
求高手不吝赐教~!谢谢~

解决方案 »

  1.   

    哦,楼上的高手,如果是在SQL SERVER2000中呢?谢谢~!
      

  2.   

    用游标啊。
    多定义一个参数,记下当前的值,下一行的时候再用当前值减刚才的值啊。
    代码方面的参考联机帮助或者看SQL SERVER 技术内幕。应该不会难。
    有什么具体的问题再问。
      

  3.   

    噢,用游标的话我也是晓得的;
    难道不能用SQL语句直接写出?
      

  4.   

    表tab的数据class, price
    001  , 5000
    002  , 6000
    003  , 5600
    ...
    在SQL server 2000中可用下面的方法实现:select a.class,a.price-isnull(b.price,0) as price from
    (select *,class+0 as class1 from tab ) a  left join
    (select *, class+1 as class1 from tab where  class<>( select max(class) from tab)) b
    on a.class1=b.class1
    得到结果:class, price
     001 , 5000   
     002 , 1000  
     003 , -400  
     ...
    oracle中我就不清楚了.................:)
      

  5.   

    create table t(
           单位编号  char(10),
           收入  decimal null
    )insert into t
    select '001',             5000
    union
    select '002',             6000
    union
    select '003',             5600select 单位编号,  
    差 = 收入 - IsNull((select top 1 收入 from t 
    where cast(单位编号 as int) < cast(a.单位编号 as int) order by cast(单位编号 as int) desc), 0)
    from t a 测试结果:
    001        5000
    002        1000
    003        -400
      

  6.   

    ORARichard(没钱的日子......) ( ) 信誉:100  2005-1-21 12:16:50  得分: 0  
     
     
       
    --try;select a.单位编号,a.收入-b.收入 差 from 
    (
      select rownum no,单位编号,收入 from tb
    ) a,
    (
      select rownum no,单位编号,收入 from (select '000' 单位编号,0 收入 from dual union all 
                               select 单位编号,收入 from tb)
    ) b
    where a.no=b.no;  
     
    ---------------------------------
    在ORACLE的实现,谢谢大家~!