有表1(A,B,C,D)ABCD都是INT
要求每给表1插入一行数据的时候C和D的数是前一行的结果相加
也就是
表1
 A   B     C        D
 1   1     10       5
 1   1     15(C+D) 5
 1   1     20(C+D) 5
这样一次类推 反正每插入一行C的数据就是本身的数加上D的数
但是用SQL Insert into语句在VALUES里面不能出现变量 所以就不知道怎么用Insert into了
ADOQuery1.SQL.Text:='Insert into 表1(A,B,C,D) Values('1','1',C+D,'5')';
请问在Values里面的C+D怎么做呢?

解决方案 »

  1.   

    insert into 表1(A,B,C,D)
    select top 1 '1','1',c+d,'5' from 表1 order by C desc但表1若没有数据的话(另外特别处理吧),会插入不成功
      

  2.   

    insert into 表1(A,B,C,D)
    select  1,1,C+D,5 from 表1 where C=(select max(C) from 表1)
      

  3.   

    考虑第一行的插入:
    insert into 表1(A,B,C,D)
    select 1,1,isnull((C+D),10),5 from 表1 where C=(select max(C) from 表1)
      

  4.   

    就是不想把C先查出来才 但是用update 表1 set c=c+d 就可以 就不知道为什么insert into 不行
      

  5.   

    我这个表只是做一个例子 实际中C是库存 D是当入库的数量 假设C当时有100,如果D入库50 那C是不是100+50=150,下次如果D再入库20 那C是不是150+20=170这样的的 不要对我举例的那个表太认真,
    在用UPDATE SET中如果写成 update 表1 set C=C+D 这样就没有问题 但是为什么在
     insert into 表1(A,B,C,D) values(1,1,C+D,10)这里就不能用呢 说values里面不能出现表达式或者变量
      

  6.   

    你给出的信息还是不完整
    我理解的是,你有一张入库流水帐表,每次记录出入库的操作和库存的变化,在这张流水表中,只有最后一次插入的记录对你新增是有效的,其他都是历史记录。所以,你需要有一个字段用来标记哪条是最后一次新增的记录,你可以使用时间戳或流水号来表示,这样你在新插入一条的时候就先检索出最后记录,取出当前的库存值,然后计算变化后的值,再插入。语句大致如下:
    insert into TAB 
    select 1 as A, 1 as B, (select C from TAB where 最后一次新增的流水号)+10 as C, 10 as D