Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL进行Fifo计算_Sql_Loops_Fifo - Fatal编程技术网

使用SQL进行Fifo计算

使用SQL进行Fifo计算,sql,loops,fifo,Sql,Loops,Fifo,我正在尝试在我的库存表中使用FIFO方法,该表有4列 项目代码、制造日期、库存数量、订单数量 因此,当我得到一个订单的项目订单数量列将被更新,它应该根据最早的生产日期进行处理,一旦库存耗尽,它应该移动到下一个生产日期。 如何在SQL中实现这一点。这可能会解决您的问题。如果没有,请更详细地解释您的场景 在进行实际实施之前,请参考链接,以及 库存表的样本数据: 查询先进先出基础 接受答案,如果它对您有帮助欢迎使用SO,请阅读。显示示例数据和预期输出以及您尝试过的内容。谢谢。你的问题太宽了。请把范围

我正在尝试在我的库存表中使用FIFO方法,该表有4列 项目代码、制造日期、库存数量、订单数量

因此,当我得到一个订单的项目订单数量列将被更新,它应该根据最早的生产日期进行处理,一旦库存耗尽,它应该移动到下一个生产日期。
如何在SQL中实现这一点。

这可能会解决您的问题。如果没有,请更详细地解释您的场景

在进行实际实施之前,请参考链接,以及

库存表的样本数据:

查询先进先出基础


接受答案,如果它对您有帮助

欢迎使用SO,请阅读。显示示例数据和预期输出以及您尝试过的内容。谢谢。你的问题太宽了。请把范围缩小一点。谢谢你的快速帮助。在很大程度上帮助了我。我的主要要求是从制造日期批次中找出每个项目的库存余额。如果我们得到订单,将按照日期升序进行。或者,如果项目A有3个制造日期批次,且每个批次有5个单元,当我得到12个单位的订单时,它应该按升序遍历所有批次,并在列中更新每个批次的余额。因此,这里我得到了12个单位的订单,因此1和2个批次将耗尽,余额2将取自第3批次,余额3应针对该行进行更新。不确定您是否可以看到我发布的结果picHi Ram,我们在这里仅声明一个@ReqOrderQty。如果有多个订单呢??如何声明?如何声明多个@ReqOrderQty。我们可以一次性使用sql server中的字符串拆分、临时表和游标来满足我们的需要。同时更新代码。字符串拆分已解决。我遇到的一个问题是,查询没有移动到下一个条件。它在第一个一停。它不会在一排排中移动。我的意思是,在第二个Begin命令之前,查询就被忽略了
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