首页 > 解决方案 > 获取可用数量少于需要的物品

问题描述

我有一个订单项目列表和每个项目的库存数量列表

我想获得每个我没有足够库存的物品中的第一个

这是订购商品的清单

OrderId     Item       QtyNeeded
----------- ---------- -----------
156987      Item1025   72
156991      Item1025   55
157000      Item125    30
156986      Item1250   50
156989      Item255    20
156997      Item255    99
156992      Item3356   90
156988      Item659    60
156990      Item6598   1
156998      Item6599   105
156999      Item6600   200
156993      Item6600   105
156994      Item6602   100
156995      Item6603   30
156996      Item7809   56

这是库存清单

Item       QtyHave
---------- -----------
Item1025   200
Item125    20
Item1250   65
Item255    110
Item3356   100
Item659    100
Item6598   25
Item6599   100
Item6600   275
Item6602   120
Item6603   50
Item7809   75

我想查看一个包含第一个订单项目的列表,我没有足够的库存,如下所示:

OrderId     Item
----------- ----------
157000      Item125
156997      Item255
156998      Item6599
156993      Item6600

最好看看有多少是部分可用的

OrderId     Item       QtyAvailable
----------- ---------- ------------
157000      Item125    20
156997      Item255    90
156998      Item6599   100
156993      Item6600   75

标签: c#sqllistalgorithm

解决方案


我不太符合您的预期结果,如果您澄清一下您是如何通过这些数字得出的,我可以改进这一点 - 但希望这能让您开始。

如果您跟踪按 Order id 排序并按项目分区所需的累积数量,您会看到每个步骤需要多少东西。然后,您可以将其加入您的库存

with requirements as
(
  select 
    OrderId,
    Item,
    QtyNeeded,
    SUM(QtyNeeded) OVER (PARTITION BY Item ORDER BY OrderId) as CumQtyNeeded
  from orders
)
select *
from requirements r
inner join inventory i
on r.item = i.item
where r.CumQtyNeeded > i.QtyHave

推荐阅读