使用 SQL 进行 Fifo 计算

Fifo Calculation Using SQL

我正在尝试在我的库存中采用 FIFO 方法Table哪 4 列作为 项目代码、制造日期、库存数量、订单数量

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

中完成此操作

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

在进行实际实施之前,请参阅链接,How to Loop through the set of records and Cursor

Sample Data for Inventory Table:

Query For FIFO Basis

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;

Output

String Split

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

如果对您有帮助,请采纳