帮我处理一个问题:
比如一个表有A,B.C.D,四个字段,A存保单号,B存批单号,C存费率值,D存费率变化值。
A   B    C    D
01  --   0.1  0
01  01-1 0.3  0
02  --   0.5  0
02  02-1 0.2  0
就是要把01对应的D的值改为01批单的费率减去保单的费率0.3-0.1,02对应的D的值改为02批单的费率减去保单的费率0.2-0.5 
怎样用SQL语句实现,ORCALE的 
.....

解决方案 »

  1.   

    存储过程也可以,保单只有一条,对应多条批单,用批单的费率值C减去保单的费率值C,为D的值
      

  2.   

    下面的写法,假设--不做处理,后一条减去前一条的值SQL>select a.*,decode(b,'--',d,c-lag(c,1,0) over(partition by a order by a)) as e from test a;A  B                   C          D          E
    -- ---------- ---------- ---------- ----------
    01 --                 .1          0          0
    01 01-1               .3          0         .2
    02 --                 .5          0          0
    02 02-1               .2          0        -.3
      

  3.   

    A   B    C    D
    01  --   0.1  0
    01  01-1 0.3  0
    01  01-2 0.3  0
    02  --   0.5  0
    02  02-1 0.2  0
    结果为
    A   B    C    D
    01  --   0.1  0
    01  01-1 0.3  0.2
    01  01-2 0.3  0.1
    02  --   0.5  0
    02  02-1 0.2  -0.3
      

  4.   

    其中order by a可能需要按照你自己规定的排序列修改一下,比如你的前后是按照b的话,就是order by b
      

  5.   

    错了
    A   B    C    D
    01  --   0.1  0
    01  01-1 0.3  0
    01  01-2 0.4  0
    02  --   0.5  0
    02  02-1 0.2  0
    结果为
    A   B    C    D
    01  --   0.1  0
    01  01-1 0.3  0.2
    01  01-2 0.4  0.2
    02  --   0.5  0
    02  02-1 0.2  -0.3
      

  6.   

    UPDATE TAB S SET D=(
    SELECT T.C-S.C FROM TAB T
    WHERE S.A=T.A AND T.B IS NOT NULL

    WHERE S.B IS NULL
      

  7.   

    tab s?什么意思,,,如果表名叫Datatable,语句是什么啊
      

  8.   

    楼上的,你最好执行一下看了结果再贴上来,呵呵SQL>UPDATE test S SET D=(
      2  SELECT T.C-S.C FROM test T
      3  WHERE S.A=T.A AND T.B IS NOT NULL
      4  )
      5  WHERE S.B IS NULL;
    SELECT T.C-S.C FROM test T
    *
    ERROR at line 2:
    ORA-01427: single-row subquery returns more than one row
      

  9.   

    错误是减法那里该  吗
    应该这样吗 select t.c-s.c as result from .....
      

  10.   

    修改了下,
    UPDATE tablename S SET S.D=(SELECT S.C-T.C FROM tablename T WHERE T.B IS NULL and T.A=S.A) WHERE S.B IS NOT NULL OK了