0
我有一個表列出了我的清單中的項目,total quantity on hand
,ordered qty
和ship date
。我的SQL查詢似乎處於循環狀態
+-------+-----------+------------+----------+ | Item | QtyOnHand | QtyOrdered | ShipDate | +-------+-----------+------------+----------+ | Itema | 100 | 80 | 3/4/14 | | Itemb | 80 | 220 | 3/8/14 | | Itema | 100 | 80 | 3/10/14 | | Itemb | 80 | 100 | 3/12/14 | +-------+-----------+------------+----------+
我試圖創建一個查詢,將通過銷售訂單逐項日期(PromiseDate)順序滾動。使用已知的庫存金額(QtyOnHand)減去每個訂單的QtyOrdered金額,並在扣除QtyOrdered後保留QtyOnHand的運行總額,並且只在QtyOnHand爲<時寫入我的表格1這樣我就知道具體項目的日期沒有庫存。
在處理完後面的數據之後,我的新表格應該包含兩條記錄,每條記錄代表項目將耗盡庫存的日期。
請幫忙。 謝謝
肯
CREATE TABLE #OverInv (Item VARCHAR(15), PromiseDate DATETIME, QtyOnHand INT, QtyOrdered INT, TotalOver INT)
DECLARE @Item VARCHAR(15),
@PromiseDate DATETIME,
@QtyOrdered INT,
@QtyOnHand INT,
@CurrentItem VARCHAR(15),
@TotalOver INT
SET @TotalOver = 0
SET @CurrentItem = 0
DECLARE rt_cursor CURSOR
FOR
SELECT Item, PromiseDate, QtyOrdered, QtyOnHand
FROM Inventory
OPEN rt_cursor
FETCH NEXT FROM rt_cursor INTO @Item,@PromiseDate,@QtyOrdered,@QtyOnHand
WHILE @@FETCH_STATUS = 0
IF @CurrentItem = 0
BEGIN
SET @CurrentItem = @Item
SET @TotalOver = (@QtyOnHand - @QtyOrdered)
IF @TotalOver < 1
BEGIN
INSERT #OverInv VALUES (@Item,@PromiseDate,@QtyOnHand,@QtyOrdered,@TotalOver)
FETCH NEXT FROM rt_cursor INTO @Item,@PromiseDate,@QtyOrdered,@QtyOnHand
SET @TotalOver = 0
END
ELSE
BEGIN
FETCH NEXT FROM rt_cursor INTO @Item,@PromiseDate,@QtyOrdered,@QtyOnHand
END
END
IF @CurrentItem = @Item
SET @TotalOver = (@TotalOver - @QtyOrdered)
BEGIN
IF @TotalOver < 1
BEGIN
INSERT #OverInv VALUES (@Item,@PromiseDate,@QtyOnHand,@QtyOrdered,@TotalOver)
FETCH NEXT FROM rt_cursor INTO @Item,@PromiseDate,@QtyOrdered,@QtyOnHand
SET @TotalOver = 0
END
ELSE
BEGIN
FETCH NEXT FROM rt_cursor INTO @Item,@PromiseDate,@QtyOrdered,@QtyOnHand
END
END
IF @CurrentItem <> @Item
SET @CurrentItem = @Item
SET @TotalOver = (@QtyOnHand - @QtyOrdered)
BEGIN
IF @TotalOver < 1
BEGIN
INSERT #OverInv VALUES (@Item,@PromiseDate,@QtyOnHand,@QtyOrdered,@TotalOver)
FETCH NEXT FROM rt_cursor INTO @Item,@PromiseDate,@QtyOrdered,@QtyOnHand
SET @TotalOver = 0
END
ELSE
BEGIN
FETCH NEXT FROM rt_cursor INTO @Item,@PromiseDate,@QtyOrdered,@QtyOnHand
END
END
CLOSE rt_cursor
DEALLOCATE rt_cursor
SELECT * FROM #OverInv ORDER BY Item
DROP TABLE #OverInv