关于计算先进先出库存成本问题
请教各位大虾,我有一个明细表mingx
id 商品代码 数量 价格 日期 类别
1 001 10 8 2007-03-01 采购
2 001 8 12 2007-03-10 采购
3 001 12 6 2007-04-15 采购
4 002 5 10 2007-04-02 采购
5 001 2 16 2007-04-05 销售
6 001 18 16 2007-04-20 销售
7 001 5 16 2007-05-20 销售
我的目的是按照先进先出方法统截止某个日期的库存成本.比如到2007-05-20时,001卖出25个,剩下库存成本应为5*6元=30,002没卖出去,应是5*10=50,请问各位大虾怎么写sql语句或存储过程,急
[解决办法]
declare @t table(id int,商品代码 varchar(4),数量 int,价格 int,日期 datetime,类别 varchar(8))
insert into @t select
1, '001 ', 10, 8, '2007-03-01 ', '采购 ' union all select
2, '001 ', 8, 12, '2007-03-10 ', '采购 ' union all select
3, '001 ', 12, 6, '2007-04-15 ', '采购 ' union all select
4, '002 ', 5, 10, '2007-04-02 ', '采购 ' union all select
5, '001 ', 2, 16, '2007-04-05 ', '销售 ' union all select
6, '001 ', 18, 16, '2007-04-20 ', '销售 ' union all select
7, '001 ', 5, 16, '2007-05-20 ', '销售 '
declare @d varchar(10)
set @d= '2007-05-20 '
select sum(金额) from
(
select a.*,
(case when (select sum(数量) from @t where 类别= '采购 ' and 商品代码=a.商品代码 and 日期 <a.日期)> =isnull(b.数量,0) then a.数量
when (select sum(数量) from @t where 类别= '采购 ' and 商品代码=a.商品代码 and 日期 <=a.日期) <=isnull(b.数量,0) then 0
else (select sum(数量) from @t where 类别= '采购 ' and 商品代码=a.商品代码 and 日期 <=a.日期)-isnull(b.数量,0) end)*a.价格 金额
from @t a left join
(select 商品代码,sum(数量) 数量 from @t where 类别= '销售 ' and 日期 <= @d group by 商品代码) b
on a.商品代码=b.商品代码
where a.类别= '采购 '
) a