1

는 어떻게 stocktable하는 Salestable의 비용을 업데이트하려면, 위의 데이터에서 SQL 서버에 예를 판매 표에 대한

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 

에서 이전 행 데이터를 업데이트하기 우려에 대한 ItemCode 및 date.If 관심 날짜에 판매가 발생했습니다 (StockTable) 이전 날짜 비용의 비용을 업데이 트하려는 경우.

+0

SlNo가 열 – lostmylogin

+0

원하는 출력을 표시 할 수 있습니까? – gotqn

+0

빠른 테스트를 위해 스키마와 데이터를 공유 할 수 있다면 좋을 것입니다. – lostmylogin

답변

1

이 작업을 수행하려고 :

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; 

enter image description here

0
나는 그것을 테스트하지 않은하지만 당신이 빠른 테스트를위한 스키마와 데이터를 공유 할 수 있다면 좋을 텐데

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 

작동합니다

0
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