再问材料出入明细帐
表1:盘点表(每月月底将盘点的实际数量输进去)
字段:
盘点日期 产品名称 盘点数量
2007-4-28 AAAA 2000
...
表2:材料出入明细表(当月材料出入明细)
字段:
出入库日期 产品名称 收发类型 数量
2007-5-29 AAAA 入库 1000
2007-5-29 bbbb 入库 2000
2009-5-30 AAAA 出库 50
...
要实现的结果:
---------------------------
日期 产品名称 收发类型 入库数量 出库数量 结存数量
---------------------------
AAAA 期初结存 2000
2007-5-29 AAAA 入库 1000 3000
2007-5-30 AAAA 出库 50 2950
...
拜托了...
[解决办法]
select a.出入库日期,a.产品名称,b.入库数量,b.出库数量,(b.入库数量+b.出库数量+c.盘点数量)as 结存数量
from A a
left join
(
select 产品名称 ,sum(case when 收发类型= '入库 ' then 数量 else 0 end)as 入库数量,
sum(case when 收发类型= '出库 ' then -数量 else 0 end)as 出库数量
from A --出入明细表
group by 产品名称
)B b on a.产品名称=b.产品名称
left join
(
select 产品名称 , isnull(盘点数量,0)as 盘点数量 from B --盘点表
)c on a.产品名称=c.产品名称
[解决办法]
select 产品名称,日期,收发类型,
入库数=case 收发类型 when '入库 ' then 数量 end,
出库数=case 收发类型 when '出库 ' then 数量 end,
[结存]=(select sum(case 收发类型 when '入库 ' or '期初结存 ' then 数量+ else -数量 end)
from test where 日期 <=a.日期)
from
(select * from test union all
select 盘点日期, 产品名称, '期初结存 ', 盘点数量,
from 盘点表 ) a
[解决办法]
create table 盘点表(盘点日期 datetime,产品名称 varchar(20),盘点数量 int)
create table 明细表(出入库日期 datetime,产品名称 varchar(20),收发类型 varchar(20),数量 int)
insert 盘点表 select '2007-4-28 ', 'AAAA ',2000
union all select '2007-5-29 ', 'bbbb ',3000
insert 明细表 select '2007-5-29 ', 'AAAA ', '入库 ',1000
union all select '2007-5-29 ', 'bbbb ', '入库 ',2000
union all select '2009-5-30 ', 'AAAA ', '出库 ',50
select 日期,产品名称,收发类型,入库数,出库数,结存数量 from
(
select top 100 percent 日期=null,产品名称,收发类型= '期初结存 ',入库数=null,出库数=null,结存数量=盘点数量,bh=1 from 盘点表
union all
select top 100 percent 出入库日期,产品名称,收发类型,入库数=case 收发类型 when '入库 ' then 数量 end,
出库数=case 收发类型 when '出库 ' then 数量 end,
结存数量=(select sum(case 收发类型 when '入库 ' then 数量 else -数量 end)
from 明细表 where 出入库日期 <=a.出入库日期),bh=2
from 明细表 a
order by 产品名称,bh
)b
order by 产品名称,b.bh
drop table 盘点表,明细表
/*
日期 产品名称 收发类型 入库数 出库数 结存数量
-------------------------- --------- --------------- ----------- ----------- ------
NULL AAAA 期初结存 NULL NULL 2000
2007-05-29 00:00:00.000 AAAA 入库 1000 NULL 3000
2009-05-30 00:00:00.000 AAAA 出库 NULL 50 2950
NULL bbbb 期初结存 NULL NULL 3000
2007-05-29 00:00:00.000 bbbb 入库 2000 NULL 3000
(所影响的行数为 5 行)*/