已购买批次的计算余额

  • 本文关键字:计算 余额 tsql
  • 更新时间 :
  • 英文 :


我有一份按日期列出的购买清单。例如:

项目代码,采购日期,采购数量

  • XXX,2012年1月1日,10
  • XXX、 2012年1月10日,5

对于该项目,我有相应的销售交易:

项目,销售日期,销售数量

  • XXX,2012年1月2日,-5
  • XXX、 2012年1月9日,-3
  • XXX、 2012年1月11日,-3

我想获得一个SQL查询(没有光标),以获得每个采购订单数量的余额。I.e将每次购买(先进先出)运行到0。(用于存货账龄分析)

如何将"采购"与"销售"结合起来,以获得每个采购库存批次的剩余余额?这在没有光标的情况下可能吗?

是。

您将两个表union放在一起,并对结果集运行一个连续的合计。

;with cte as 
(
select itemcode, purchasedate as tdate, purchaseqty as qty from purchases
union
select itemcode, salesdate, salesqty from sales
)
select 
t1.*,
SUM(t2.qty)
from cte t1
left join cte t2 
on t1.tdate>=t2.tdate
and t1.item = t2.item
group by t1.item, t1.pdate, t1.qty   

为了在任何特定时间获得剩余的股票,适用相同的本金。

select p1.*, 
case when (select SUM(abs(qty)) from sales) > SUM(p2.qty) then 0
else SUM(p2.qty) - (select SUM(abs(qty)) from sales)  end as stockremaining         
from purchases p1
left join purchases p2 on p1.item = p2.item 
and p2.purchasedate <= p1.purchasedate
group by p1.purchasedate, p1.item, p1.qty

给出

1   2012-01-01    10    0
1   2012-01-10     5    4

最新更新