Tsql 已购地块的计算余额

Tsql 已购地块的计算余额,tsql,Tsql,我有一份按日期列出的购物清单。例如: 项目代码、采购日期、采购数量 三十、 2012年1月1日,10 三十、 2012年1月10日,5 对于该商品,我有一个对应的销售交易记录: 项目、销售日期、销售数量 三十、 2012年1月2日-5日 三十、 2012年1月9日-3日 三十、 2012年1月11日-3 我希望得到一个SQL查询(没有光标),以获得每个采购订单数量的余额。即,将每次购买(先进先出)运行到0。(用于账龄存货) 如何将采购与销售合并,以获得每个采购库存批次的剩余余额?这在没有

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

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

  • 三十、 2012年1月1日,10
  • 三十、 2012年1月10日,5
对于该商品,我有一个对应的销售交易记录:

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

  • 三十、 2012年1月2日-5日
  • 三十、 2012年1月9日-3日
  • 三十、 2012年1月11日-3
我希望得到一个SQL查询(没有光标),以获得每个采购订单数量的余额。即,将每次购买(先进先出)运行到0。(用于账龄存货)

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

您将两个表合并在一起,并对结果集运行总计

   ;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

一个连续的总数将给我在任何日期的库存,但不是一个购买批次上剩余的库存。我一直在进行这方面的分析,但它没有给出所需的结果。谢谢。这使我走上了正确的轨道。完成后将发布最终SQL以供参考您使用的SQL server版本是什么?您想要的结果是什么?如果您可以发布实际的预期结果记录,那么理解您要查找的内容就会简单得多。另外,了解您使用的SQL Server的版本也很重要。@RichardVivian您是否会像您所说的那样发布最终的SQL代码?我也有同样的问题,正在寻找一个解决方案。谢谢
1   2012-01-01    10    0
1   2012-01-10     5    4