有两个表,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为临时表中的记录

解决方案 »

  1.   


    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
      

  2.   


    --建一临时表 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
      

  3.   

    我听明白了
    如果一条一条处理的话,我想到的方式比较笨,比如:
    设最初表中的num值为oldnum,
    1,查询b表id为1的num值
    2,更新a表
    3,更新b表如果多条处理,不太清楚应该怎么做
      

  4.   

    sql1:
    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把这个值更新到新的一天库存记录去呢?
              
      

  5.   

    简单的出库入库用得这么麻烦吗
    这样连历史纪录都没有了
    直接用一个表不就行了
    id,name,num,fdate