一张出入库表FStore 主要字段为
单据主键 单据编号 单据时间 单据类型 物品类型ID 物品数量
1 入库单001 2013-7-1 1 1001 20
2 入库单002 2013-7-2 1 1001 10
3 入库单003 2013-7-2 1 1002 50
4 出库单001 2013-7-10 2 1001 25
5 出库单002 2013-7-12 2 1002 30入库单类型为1 出库为2
-------------------我想按照先进先出的原则对入库单进行统计,如以下结果--------------------
入库单号 入库时间 物品类型ID 入库数量 已出库数量 剩余数量
入库单001 2013-7-1 1001 20 20 0
入库单002 2013-7-2 1001 10 5 5
入库单003 2013-7-10 1002 50 30 20
-------------已单据时间做为查询条件,传如开始时间和结束时间2个参数写一个存储过程请问怎么写-----------
单据主键 单据编号 单据时间 单据类型 物品类型ID 物品数量
1 入库单001 2013-7-1 1 1001 20
2 入库单002 2013-7-2 1 1001 10
3 入库单003 2013-7-2 1 1002 50
4 出库单001 2013-7-10 2 1001 25
5 出库单002 2013-7-12 2 1002 30入库单类型为1 出库为2
-------------------我想按照先进先出的原则对入库单进行统计,如以下结果--------------------
入库单号 入库时间 物品类型ID 入库数量 已出库数量 剩余数量
入库单001 2013-7-1 1001 20 20 0
入库单002 2013-7-2 1001 10 5 5
入库单003 2013-7-10 1002 50 30 20
-------------已单据时间做为查询条件,传如开始时间和结束时间2个参数写一个存储过程请问怎么写-----------
if OBJECT_ID('tb') is not null
drop table tb
create table tb
(
单据主键 int,
单据编号 varchar(50),
单据时间 datetime,
单据类型 int,
物品类型ID int,
物品数量 int
)insert into tb
select 1,'001','2013-7-1',1,1001,20 union all
select 1,'001','2013-7-1',1,1001,5 union all
select 2,'002','2013-7-2',1,1001,10 union all
select 3,'003','2013-7-2',1,1002,50 union all
select 4,'001','2013-7-10',2,1001,15 union all
select 5,'002','2013-7-12',2,1002,10
gocreate proc proc_name
@beginTime datetime='2013-7-1',
@endTime datetime='2013-7-3'
as
begin ;with tab as(
select 入库单号=单据编号,入库时间=单据时间,物品类型ID,入库数量=sum(物品数量),
出库数量=isnull((select SUM(物品数量) from tb t2 where t2.单据编号=t1.单据编号 and t2.单据类型=2),0)
from tb t1
where 单据类型=1 and 单据时间 between @beginTime and @endTime group by 单据编号,单据时间,物品类型ID
)
select *,剩余数量=入库数量-出库数量 from tab
end--exec proc_name @beginTime='2013-7-1',@endTime='2013-9-4'-----------------------------------------------------------------
001 2013-07-01 00:00:00.000 1001 25 15 10
002 2013-07-02 00:00:00.000 1001 10 10 0
003 2013-07-02 00:00:00.000 1002 50 0 50
create table FStore
(单据主键 int, 单据编号 varchar(16), 单据时间 date, 单据类型 int, 物品类型ID int, 物品数量 int)insert into FStore
select 1, '入库单001', '2013-7-1', 1, 1001, 20 union all
select 2, '入库单002', '2013-7-2', 1, 1001, 10 union all
select 3, '入库单003', '2013-7-2', 1, 1002, 50 union all
select 4, '出库单001', '2013-7-10', 2, 1001, 25 union all
select 5, '出库单002', '2013-7-12', 2, 1002, 30
with t as
(select a.单据编号 '入库单号',
a.单据时间 '入库时间',
a.物品类型ID,
a.物品数量 '入库数量',
(select sum(b.物品数量)
from FStore b
where b.单据类型=2 and b.物品类型ID=a.物品类型ID
and b.单据时间>a.单据时间) 'x',
(select sum(c.物品数量)
from FStore c
where c.单据类型=1 and c.物品类型ID=a.物品类型ID
and c.单据时间<=a.单据时间) 'y'
from FStore a
where a.单据类型=1
)
select 入库单号,入库时间,物品类型ID,入库数量,
case when y<=x then 入库数量 else 入库数量-(y-x) end '已出库数量',
入库数量-case when y<=x then 入库数量 else 入库数量-(y-x) end '剩余数量'
from t/*
入库单号 入库时间 物品类型ID 入库数量 已出库数量 剩余数量
---------------- ---------- ----------- ----------- ----------- -----------
入库单001 2013-07-01 1001 20 20 0
入库单002 2013-07-02 1001 10 5 5
入库单003 2013-07-02 1002 50 30 20(3 row(s) affected)
*/
有没有当天入库数天出库的情况?
有没有当天入库当天出库的情况?