有两个表,a和b,存放的是一些物品的库存。
例如 a:id,name,num
b: id,name,num
每天早上,我可能要清空b表中的记录,然后将a表中的数据复制到b表,此时两个表中的数据是一致的(sql1?)
一天的工作开始,a表可能负责进货,b表负责卖货,此时分别更新a b表中的记录
晚上的时候,让a, b表库存对照,更新a表,清空b表,然后再将a表的数据复制给b表(sql2?)
不知道大家明白没有,举个例子吧
早上 a: 1,铅笔 ,10
b: 1,铅笔,10
一天下来,又进了7支铅笔,卖了5只铅笔
此时 a: 1,铅笔,17(10+7)
b: 1,铅笔,5(10-5)
然后对照更新a:表
a:应该是 1,铅笔,12
然后将a表的数据重新复制给b表,开始第二天的工作
大家看看这样的sql语句怎么写?可以建一个临时表,每天把库存放到临时表中,然后晚上 根据临时表的库存更新
也就是 17-10+10-5,10为临时表中的记录
例如 a:id,name,num
b: id,name,num
每天早上,我可能要清空b表中的记录,然后将a表中的数据复制到b表,此时两个表中的数据是一致的(sql1?)
一天的工作开始,a表可能负责进货,b表负责卖货,此时分别更新a b表中的记录
晚上的时候,让a, b表库存对照,更新a表,清空b表,然后再将a表的数据复制给b表(sql2?)
不知道大家明白没有,举个例子吧
早上 a: 1,铅笔 ,10
b: 1,铅笔,10
一天下来,又进了7支铅笔,卖了5只铅笔
此时 a: 1,铅笔,17(10+7)
b: 1,铅笔,5(10-5)
然后对照更新a:表
a:应该是 1,铅笔,12
然后将a表的数据重新复制给b表,开始第二天的工作
大家看看这样的sql语句怎么写?可以建一个临时表,每天把库存放到临时表中,然后晚上 根据临时表的库存更新
也就是 17-10+10-5,10为临时表中的记录
sql1:
drop table b
select * into b from asql2:
select id,name,sum(num) into #a
(select * from a
union all
select * from b) c
group by id,namedelete a
select * into a from #a
--建一临时表 c:id,name,num--早上SQL:
delete from b
delete from c
insert into b select id,name,num from a
insert into c select id,name,-num from a--晚上SQL:
insert into c select id,name,num from b
insert into c select id,name,num from a
delete from a
insert into a select id,name,sum(num) from c group by id,name
如果一条一条处理的话,我想到的方式比较笨,比如:
设最初表中的num值为oldnum,
1,查询b表id为1的num值
2,更新a表
3,更新b表如果多条处理,不太清楚应该怎么做
insert into b(id,name,num)
select id,name,num
from a
这样可以将a表中的数据复制到b表中sql2:
先创建一个临时表:table1
insert into table1(id,name,num)
select id,name,num
from a
create procedure proc_mm
as
declare @aa int
declare @bb int
declare @cc int
select @aa=num from table1 @aa中记录的为临时表中的num数
select @bb=(@aa-num) from b @bb中记录的为当天卖出的数
select @cc=(num-@bb) from a @cc中记录的为当天结束后的num数,也就是你要更新的num数
这样是不是可以再根据ID把这个值更新到新的一天库存记录去呢?
这样连历史纪录都没有了
直接用一个表不就行了
id,name,num,fdate