现在有三个表
表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:入仓明细
货码 日期 入仓数量
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的库存+入仓累计-出仓累计=余额 。
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 货码
sum(入仓数量) 为什么是入仓数量呢?
sum(case when 入仓数量<0 then -入仓数量 else 0 end) as 出仓累计
这里还入仓数量吗?
表3 ,
(select 货码,sum(入仓数量) aa from 表1 group by 货码) AA,
(select 货码,sum(出仓数量) bb from 表2 group by 货码) BB
where 表3.货码=AA.货码 and 表3.货码=BB.货码 可能不行
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