【问题标题】:Calculated balance of purchased lots购买手数的计算余额
【发布时间】:2023-03-16 17:55:01
【问题描述】:

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

商品代码、购买日期、购买数量

  • 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 查询(没有游标),以获取每个采购订单数量的余额。即每次购买(先进先出)为0。(用于老化库存)

您如何将采购加入到销售中以获得每个已购买库存批次的余额?没有光标这可能吗?

【问题讨论】:

  • 你用的是什么版本的sql-server?
  • 您要寻找的结果是什么?如果您可以发布实际的预期结果记录,则可以更轻松地了解您要查找的内容。此外,了解您使用的 SQL Server 版本也很重要。
  • @RichardVivian 你会按照你说的发布你的最终 SQL 代码吗?我有同样的问题,正在寻找一个可靠的解决方案。谢谢。

标签: tsql


【解决方案1】:

是的。

您将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

【讨论】:

  • 运行总计将为我提供任何日期的手头库存,但不是采购批次中剩余的库存。我一直在沿着这条分析路径进行汇总,但它没有给出所需的结果。
  • 谢谢。这让我走上了正确的轨道。完成后将发布最终 SQL 以供参考
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2015-11-06
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多