CREATE TABLE #OnHand(
PartNum NVARCHAR(100)
,OnHandQty DECIMAL
,IUM NVARCHAR(5)
)
INSERT INTO #OnHand
(PartNum, OnHandQty, IUM)
VALUES
('100009', 19430.00, 'KG')
CREATE TABLE #Trans(
TranDate DATETIME
,PartNum NVARCHAR(100)
,TranQty DECIMAL
,IUM NVARCHAR(5))
INSERT INTO #Trans
(TranDate, PartNum, TranQty, IUM)
VALUES
('2014-09-01', '100009', 10720.000, 'KG')
,('2014-09-01', '100009', 1340.000, 'KG')
,('2014-08-11', '100009', 8710.000, 'KG')
,('2014-08-11', '100009', 3350.000, 'KG')
,('2014-06-30', '100009', 9380.000, 'KG')
DECLARE @OnHand_Running DECIMAL
,@OnHandQty DECIMAL
,@TranQty DECIMAL
,@TranDate DATETIME
,@PartNum NVARCHAR(100)
,@First10Days INT = 0
,@Second10Days INT = 0
,@Third10Days INT = 0
SET @PartNum = '100009';
Set @OnHandQty = (Select OnHandQty
FROM #OnHand
WHERE PartNum = @PartNum)
Set @OnHand_Running = @OnHandQty
DECLARE tran_cursor CURSOR
FOR SELECT T.TranQty, T.TranDate
FROM #Trans T
ORDER BY T.TranDate DESC
OPEN tran_cursor
FETCH NEXT FROM tran_cursor
INTO @TranQty, @TranDate
WHILE (@@FETCH_STATUS = 0) AND (@OnHandQty > 0)
BEGIN
IF (@OnHandQty - @TranQty) < 0
BEGIN
PRINT CAST(@OnHandQty AS NVARCHAR(100)) + '-' + CAST(@TranQty AS NVARCHAR(100)) + '=' + CAST(@OnHandQty - @TranQty AS NVARCHAR(100)) + ' --Enough'
END
ELSE
BEGIN
PRINT CAST(@OnHandQty AS NVARCHAR(100)) + '-' + CAST(@TranQty AS NVARCHAR(100)) + '=' + CAST(@OnHandQty - @TranQty AS NVARCHAR(100)) + ' --Not Enough'
END
IF (DATEDIFF(DAY, @TranDate, CURRENT_TIMESTAMP) < 10)
SET @First10Days = @First10Days + @TranQty
IF (DATEDIFF(DAY, @TranDate, CURRENT_TIMESTAMP) BETWEEN 10 AND 20)
SET @Second10Days = @Second10Days + @TranQty
IF (DATEDIFF(DAY, @TranDate, CURRENT_TIMESTAMP) > 20)
SET @Third10Days = @Third10Days + @TranQty
SET @OnHandQty = @OnHandQty - @TranQty
FETCH NEXT FROM tran_cursor
INTO @TranQty, @TranDate
END
SELECT @PartNum, @OnHand_Running, 'KG', @First10Days '[0-10] Days', @Second10Days '[11-20] Days', @Third10Days '[over 21 days]'
CLOSE tran_cursor;
DEALLOCATE tran_cursor;
RETURN
최종 출력을 나타내는 임시 테이블을 만들고 WHILE 루프 중에 채 웁니다. –
호기심에서 벗어나 OnHandQty 정밀도는 소수점 100 자리까지되는 이유는 무엇입니까? – nshah
OnHandQty의 정밀도는 측정 단위가 KG (항상 PCS는 아님)이기 때문에입니다. – user3249274