首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于计算先进先出库存成本有关问题

2012-02-19 
关于计算先进先出库存成本问题请教各位大虾,我有一个明细表mingxid商品代码数量价格日期类别10011082007-0

关于计算先进先出库存成本问题
请教各位大虾,我有一个明细表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

热点排行