现在有三个表
表1:入仓明细
货码 日期      入仓数量
1    2003-8-9    1000
2    2003-8-10   2000
(货码可重复出现)
表2:出仓明细
货码 日期      出仓数量
1    2003-8-9   500
2    2003-8-10  600
(货码可重复出现)表3:总表
货码 库存  入仓累计 出仓累计
1    100    
2    200
(货码不可重复出现)用SQL在QUERY 中生成语句
条件按货码相同为准,将表1和表2以相同的货码统计生成入仓累计,出仓累计,再以表3的库存+入仓累计-出仓累计=余额 。

解决方案 »

  1.   

    Select 货码,sum(入仓数量) as 库存,
    sum(case when 入仓数量>0 then 入仓数量 else 0 end) as 入仓累计,
    sum(case when 入仓数量<0 then -入仓数量 else 0 end) as 出仓累计
    from (
    Select 货码,入仓数量 from 表1
    union all
    select 货码,-出仓数量 from 表2       -- 注意出仓数量为负数
    ) tmp  -- 指定一个别名
    group by 货码
      

  2.   

    不是在表3 生成的,是另外查询的提示 WHEN 出差错
    sum(入仓数量) 为什么是入仓数量呢?
    sum(case when 入仓数量<0 then -入仓数量 else 0 end) as 出仓累计
    这里还入仓数量吗?
      

  3.   

    update 表3 set 入仓累计=aa,出仓累计=bb from 
      表3 ,
      (select 货码,sum(入仓数量) aa from 表1 group by 货码) AA,
      (select 货码,sum(出仓数量) bb from 表2 group by 货码) BB 
      where 表3.货码=AA.货码 and 表3.货码=BB.货码 可能不行
      

  4.   


    declare @a table (货码 int, 入仓数量 int)
    insert @a values(1,       1000)
    insert @a values(2,       2000)
    insert @a values(1,       1000)
    insert @a values(2,       2000)
    declare @b table (货码 int, 出仓数量 int)
    insert @b values(1,       100)
    insert @b values(2,      200)
    insert @b values(1,       100)
    insert @b values(2,      200)declare @c table (货码 int,库存 int,  入仓累计 int, 出仓累计 int)
    insert @c values(1,    100,0,0)
    insert @c values(2,    200,0,0)update @c set 入仓累计=aa,出仓累计=bb,库存=库存+aa-bb from 
     @c a 
      left join
      (select 货码,sum(入仓数量) aa from @a group by 货码) AA
    on a.货码=AA.货码
      left join
      (select 货码,sum(出仓数量) bb from @b group by 货码) BB 
      on a.货码=BB.货码 select * from @c