나는 회사 kardex를 재건하려고하고있다. 나는 특정 Datetime에서 각 트랜잭션에 대한 평균 비용을 고려해야하는 "Average Cost Method"를 사용해야합니다.재건 회사 kardex
모든 인바운드/아웃 바운드 인벤토리 트랜잭션 (모든 동작)이있는 간단한 테이블이 있습니다.
모든 수신 트랜잭션 (구매)은 해당 송장에서 단위 비용을 받음으로써 올바르게 가격이 책정됩니다.
문제 : 모든 판매 트랜잭션 (나가는 인벤토리)에는 단위 비용이 없습니다 (해당 비용을 다시 작성해야하기 때문에). 커서를 사용할 수는 있지만 성능 문제는 모두 알고 있습니다.
나 자신을 더 잘 설명 할 수 있도록 간단한 데이터를 준비했습니다. 모든 판매 (발신 트랜잭션)에는 비용이 들지 않으며 간단한 창 함수를 사용하면 각 행이 이전 계산에 의존하기 때문에 도움이되지 않는다고 생각합니다. 그래서 이전 계산에 기초한 계산이 필요합니다. ??
DECLARE @Resultado TABLE (Row_ID BIGINT IDENTITY NOT NULL PRIMARY KEY, Inventory_Name VARCHAR(100), Transaction_Date DATETIME, DIRECTION BIT, Transaction_Name VARCHAR(100),Transaction_Quantity INT, Transaction_UnitCost NUMERIC(18,2), Transaction_Amount NUMERIC(18,2), AVERAGE_UNITCOST_AT_TRANSACTION_DATE NUMERIC(18,2))
INSERT INTO @Resultado (Inventory_Name , Transaction_Date , DIRECTION , Transaction_Name , Transaction_Quantity , Transaction_UnitCost, Transaction_Amount, AVERAGE_UNITCOST_AT_TRANSACTION_DATE)
SELECT 'COMPUTER', '2017-01-01', 1, 'INCOMING PRODUCT; PRUCHASE', 100, 10, 100 * 10, 10
UNION ALL SELECT 'COMPUTER', '2017-01-02', 1, 'INCOMING PRODUCT; PURCHASE', 105, 11, 105 * 11, 10.51
UNION ALL SELECT 'COMPUTER', '2017-01-03', 1, 'INCOMING PRODUCT; PURCHASE', 110, 12, 110 * 12, 11.03
UNION ALL SELECT 'COMPUTER', '2017-01-04', 0, 'OUTGOING PRODUCT; SALES', -200, NULL, NULL, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-05', 0, 'OUTGOING PRODUCT; SALES', -50, NULL, NULL, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-06', 1, 'INCOMING PRODUCT; PURCHASE', 110, 10, 110 * 10, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-07', 0, 'OUTGOING PRODUCT; SALES', -20, NULL, NULL, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-08', 0, 'OUTGOING PRODUCT; SALES', -20, NULL, NULL, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-09', 0, 'OUTGOING PRODUCT; SALES', -20, NULL, NULL, NULL
SELECT * FROM @Resultado
Microsoft SQL Server 2012 Standard –
테스트 데이터에서 좋은 결과를 얻었습니다. 예상되는 결과를 텍스트로 추가하고 함께 설명하십시오. – TheGameiswar