Как обновить данные предыдущей строки в SQL SERVER

Например, таблица продаж

SlNo Inventorycode Cost Date

1.    100001       1.8   01/01/2017
2.    100002       2.3   01/01/2017
3.    100002       3.5   02/01/2017
4.    100001       2.5   03/01/2017

Стол со склада

SlNO InventoryCode  Cost    Date
1.    100001              01/01/2017
2.    100002              01/01/2017
3.    100001              01/01/2017
4.    100002              02/01/2017
5.    100001              01/01/2017
6.    100002              03/01/2017

Исходя из вышеприведенных данных, я хочу обновить COST Salestable до запасов для концерна ItemCode и date. Если в дату беспокойства не было продаж, я хочу обновить (StockTable) стоимость стоимости предыдущей даты.

3 ответа

Решение

Вы пытаетесь сделать это:

DECLARE @Sales TABLE
(
    [SLNo] TINYINT
   ,[Inventorycode] INT
   ,[Cost] DECIMAL(9,1)
   ,[Date] DATE
);


DECLARE @Stock TABLE
(
    [SLNo] TINYINT
   ,[Inventorycode] INT
   ,[Cost] DECIMAL(9,1)
   ,[Date] DATE
);

INSERT INTO @Sales ([SLNo], [Inventorycode], [Cost], [Date])
VALUES (1, 100001, 1.8, '01/01/2017')
      ,(2, 100002, 2.3, '01/01/2017')
      ,(3, 100002, 3.5, '02/01/2017')
      ,(4, 100001, 2.5, '03/01/2017');

INSERT INTO @Stock ([SLNo], [Inventorycode], [Date])
VALUES (1, 100001, '01/01/2017')
      ,(2, 100002, '01/01/2017')
      ,(3, 100001, '01/01/2017')
      ,(4, 100002, '02/01/2017')
      ,(5, 100001, '01/01/2017')
      ,(6, 100002, '03/01/2017');

UPDATE @Stock
SET [Cost] = DS.[Cost]
FROM @Stock A
OUTER APPLY
(
    SELECT TOP 1 B.[Cost]
    FROM @Sales B
    WHERE B.[Inventorycode] = A.[Inventorycode]
        AND B.[Date] <= A.[Date]
    ORDER BY B.[Date] DESC
) DS;

SELECT *
FROM @Stock;

введите описание изображения здесь

Я не проверял это, но это должно работать

UPDATE stocktable
SET Cost = (
        SELECT TOP 1 Cost
        FROM SalesTable st
        WHERE st.Inventorycode = StockTable.Inventorycode
            AND st.DATE <= StockTable.DATE
        ORDER BY DATE DESC
        )
FROM StockTable

Было бы неплохо, если бы вы могли поделиться схемой и данными для быстрого тестирования

update st set cost = sl.cost from stock_table st
inner join sales_table sl on sl.Inventory_Code=st.Inventory_Code
and sl.Date = st.Date
Другие вопросы по тегам