0

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

ItemCode、购买日期、购买数量

  • 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。(用于老化库存)

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

4

1 回答 1

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
于 2012-10-12T09:12:51.887 回答