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