【问题标题】:Fifo Calculation Using SQL使用 SQL 计算 Fifo
【发布时间】:2020-05-08 18:03:47
【问题描述】:

我尝试在我的 Inventory Table 上使用 FIFO 方法,其中 4 列作为 项目代码、制造日期、库存数量、订单数量

因此,当我收到一个项目的订单时,订单数量列将被更新,并且应该根据最早的 MFG 日期进行处理,一旦库存用完,它应该移到下一个 MFG 日期。 这如何在 SQL 中完成。

【问题讨论】:

  • 欢迎来到 SO,请阅读How to Ask。显示示例数据和预期输出以及您尝试过的内容。谢谢。
  • 你的问题太宽泛了。请缩小范围。

标签: sql loops fifo


【解决方案1】:

也许这会解决您的问题。如果不是,请详细说明您的情况

在进行实际实施之前参考链接,How to Loop through the set of recordsCursor

库存表的样本数据:

基于 FIFO 的查询

Declare @ReqOrderQty as int;  
Set @ReqOrderQty=45;   // Requested Qty to Update the Records

Declare
@ItemNo Varchar(10),
@MFGCode Varchar(10),
@StockQty int,
@OrderQty int;

Declare @Query Varchar(500);
Declare Records Cursor 
for Select ItemNo,MFGCode,StockQty,OrderQty from Inventory where ItemNo='1' and OrderQty <> StockQty order by MFGCode asc

OPEN Records
FETCH NEXT FROM Records INTO 
@ItemNo,
@MFGCode,
@StockQty,
@OrderQty;

WHILE @@FETCH_STATUS = 0
BEGIN
        IF @ReqOrderQty > @StockQty
    BEGIN
        Set @ReqOrderQty = @ReqOrderQty - @StockQty;
        Set @Query='Update Inventory set OrderQty=' +CAST(@StockQty as varchar(100))+' where ItemNo='''+@ItemNo +'''and MFGCode='''+@MFGCode+''''
    END
    Else
    BEGIN
        Set @ReqOrderQty = @ReqOrderQty % @StockQty;
        Set @Query='Update Inventory set OrderQty=' +CAST(@ReqOrderQty as varchar(100))+' where ItemNo='''+@ItemNo +'''and MFGCode='''+@MFGCode+''''
    END
    PRINT @Query
    Exec (@Query)

    FETCH NEXT FROM Records INTO 
        @ItemNo,
        @MFGCode,
        @StockQty,
        @OrderQty;
END;

CLOSE Records;

DEALLOCATE Records;

输出

字符串拆分

create table #Temp(value varchar(10))
Declare @ReqOrderQty Varchar(200)
Set @ReqOrderQty = '200,40,10,100,150';
INSERT INTO #Temp SELECT * FROM  STRING_SPLIT ( @ReqOrderQty , ',' )
 // Perform the Cursor Operation as mentioned above
Drop Table #Temp

如果对你有帮助,请采纳答案

【讨论】:

  • 感谢您的快速帮助。在一定程度上有所帮助。我的主要要求是从制造日期批次中找出每个项目的库存余额。如果我们收到订单,将按日期升序排列。或者例如,如果项目 A 有 3 个制造日期批次并且每批次有 5 个单位,当我收到 12 个单位的订单时,它应该按升序遍历所有批次并更新列中每批次的余额。所以我得到了订单12 个单位,所以 1 和 2 批用完,余额 2 将从第 3 批中取出,余额 3 应针对该行更新。不确定您是否可以看到我发布的结果图片
  • 嗨 Ram 在这里我们只声明一个@ReqOrderQty。如果有多个订单怎么办?我们如何声明它?
  • 如何声明多个@ReqOrderQty。一口气??
  • @SherinNarayanan,我们可以使用 sql server 、temp table 和 Cursor 中的 String Split 来实现我们的需求。同时更新代码。
  • 字符串拆分成功了。我遇到的一个问题是查询没有进入下一个条件。它在第一个停止。它没有在行中移动。我的意思是查询在 2nd Begin 命令之前被弯腰
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
相关资源
最近更新 更多