问了一个SQL Insert into语句
有表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怎么做呢?
[解决办法]
insert into 表1(A,B,C,D)select top 1 '1','1',c+d,'5' from 表1 order by C desc
[解决办法]
实在不行把上一行的C,D值查出来,计算好再插入
[解决办法]
insert into 表1(A,B,C,D)
select 1,1,C+D,5 from 表1 where C=(select max(C) from 表1)
[解决办法]
考虑第一行的插入:
insert into 表1(A,B,C,D)
select 1,1,isnull((C+D),10),5 from 表1 where C=(select max(C) from 表1)
[解决办法]
找点资料仔细研究研究吧
[解决办法]
感觉根据你的描述,你不去确定最后一条记录,也就是你所说的上一条记录,插入后可能会有问题,如果你输入的数据为负数,通过找最大数也不可靠,还是你的数据逻辑有点问题,不是很规范。
[解决办法]
楼主,你的这个设计不好。建议重新设计表结构。表设计的原则是尽可能不要出现冗余数据
[解决办法]
用触发器不可以吗?
[解决办法]
你给出的信息还是不完整
我理解的是,你有一张入库流水帐表,每次记录出入库的操作和库存的变化,在这张流水表中,只有最后一次插入的记录对你新增是有效的,其他都是历史记录。所以,你需要有一个字段用来标记哪条是最后一次新增的记录,你可以使用时间戳或流水号来表示,这样你在新插入一条的时候就先检索出最后记录,取出当前的库存值,然后计算变化后的值,再插入。
语句大致如下:
insert into TAB
select 1 as A, 1 as B, (select C from TAB where 最后一次新增的流水号)+10 as C, 10 as D