Расчет FIFO с использованием SQL - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь разместить метод FIFO в своей таблице инвентаризации, в которой 4 столбца: код товара, дата MFG, количество на складе, количество заказа обновляется, и он должен обрабатываться на основе самой ранней даты MFG, и после того, как запас исчерпан, он должен перейти к следующей дате MFG. Как это можно сделать в SQL.

1 Ответ

0 голосов
/ 08 мая 2020

Может это решит вашу проблему. Если нет, пожалуйста, объясните свой сценарий более подробно

Перед тем, как перейти к фактической реализации. См. Ссылки, Как выполнить L oop через набор записей и Курсор

Примеры данных для инвентарной таблицы:

Sample Data

Запрос на основе 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;

Вывод

enter image description here

Разделение строк

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

Примите ответ, если он вам поможет

...