现在有五行记录,
想通过一条语句得到四个差值,
如:
五条记录如下:
2
5
9
1
6想通过一条语句得到如下结果:
3
4
-8
5这条语句怎么写呀?

解决方案 »

  1.   

    你这不是吃饱了撑着吗? 要也可以,如果有规律用一个函数那个最方便,如果实在没有,就用case
      update tab set col=(case col when 2 then 3 when 5 then ... end);
      

  2.   

    select b.id-a.id from 
    (select rownum r,test_1.* from test_1)  a
    ,
    (select rownum-1 r ,test_1.* from test_1  ) b
     where b.r=a.r
      

  3.   

    dobetterthatnthink(如果你没有那么多的选择)的方法可以。
    要求也不可笑.
    如果求本月和上月的销售差额,那lz就需要这样做了,不过,这个时候,需要有个比较字段,如月份等.
      

  4.   

    使用分析函数lead
    例如:
    SQL> select ename,job,sal from emp order by ename;ENAME      JOB              SAL
    ---------- --------- ----------
    ADAMS      CLERK           1100
    ALLEN      SALESMAN        1600
    BLAKE      MANAGER         2850
    CLARK      MANAGER         2450
    FORD       ANALYST         3000
    JAMES      CLERK            950
    JONES      MANAGER         2975
    KING       PRESIDENT       5000
    MARTIN     SALESMAN        1250
    MILLER     CLERK           1300
    SCOTT      ANALYST         3000ENAME      JOB              SAL
    ---------- --------- ----------
    SMITH      CLERK            800
    TURNER     SALESMAN        1500
    WARD       SALESMAN        1250已选择14行。SQL> select ename,job,sal2-sal from(
      2  select ename,job,sal,lead(sal,1) over(order by ename) sal2 from emp
      3  ) t;ENAME      JOB         SAL2-SAL
    ---------- --------- ----------
    ADAMS      CLERK            500
    ALLEN      SALESMAN        1250
    BLAKE      MANAGER         -400
    CLARK      MANAGER          550
    FORD       ANALYST        -2050
    JAMES      CLERK           2025
    JONES      MANAGER         2025
    KING       PRESIDENT      -3750
    MARTIN     SALESMAN          50
    MILLER     CLERK           1700
    SCOTT      ANALYST        -2200ENAME      JOB         SAL2-SAL
    ---------- --------- ----------
    SMITH      CLERK            700
    TURNER     SALESMAN        -250
    WARD       SALESMAN已选择14行。SQL>
      

  5.   

    可以参考
    select ename,job,sal2-sal from(
       select ename,job,sal,lead(sal,1) over(order by ename) sal2 from emp
      ) t;