2010-09-08 21 views
0

我試圖在SQL 2008中爲正在運行的庫存需求報告建立一個臨時表。我可以得到我要查找的結果,直到我點擊具有多行的發票爲止。這是迄今爲止代碼:SQL 2008中的運行計數器

--Gather Current Order Data 
DECLARE @b TABLE ([Planned Shipment Date] DATE, [Order] VARCHAR(15), [Line Number] VARCHAR(15), [Location] VARCHAR(15), [Item] VARCHAR(15), [QuantityUsed] INT) 

INSERT INTO @b 
SELECT [Planned Shipment Date], [Document No_], [Line No_], [Location Code], No_, CAST(SUM([Outstanding Quantity]) AS INT) 
FROM [STAGE].[dbo].[TRU$Sales Line] 
WHERE [Document No_] LIKE 'SO%' 
AND [Gen_ Prod_ Posting Group] IN ('TOY', 'AUDIO', 'BICYCLE') 
AND [Outstanding Quantity] <> 0 
GROUP BY [Document No_], [Location Code], [Line No_], [Planned Shipment Date], No_ 
ORDER BY [Planned Shipment Date], [Document No_], [Line No_], [Location Code], No_ 

--Gather Current Inventory Data 
DECLARE @a TABLE ([Item] VARCHAR(15), [Location] VARCHAR(15), [Inventory] INT) 

INSERT INTO @a 
SELECT [Item No_], [Location Code], CAST(SUM([Quantity]) AS INT) 
FROM [STAGE].[dbo].[TRU$Item Ledger Entry] 
GROUP BY [Item No_], [Location Code] 
ORDER BY [Item No_], [Location Code] 

DROP TABLE ##TEMP 
--Insert to a temp table for testing 
SELECT [Planned Shipment Date], [Location], [Item], [Order], [Line Number], 
[Outstanding Qty], [Total Inventory], [Running Order Total] 
INTO ##TEMP 
FROM 
(SELECT 
    [order].[Planned Shipment Date] 
    ,[order].[Location] 
    ,[order].[Item] 
    ,[order].[Order] 
    ,[order].[Line Number] 
    ,0 AS [Outstanding Qty] 
    ,(SELECT SUM(inventory) 
    FROM @a inv 
    WHERE inv.item = [order].[Item] 
    AND inv.location = [order].[Location]) AS [Total Inventory] 
    ,(SELECT SUM(QuantityUsed) 
    FROM @b prevorder 
    WHERE prevorder.item = [order].[Item] 
    AND prevorder.location = [order].[Location] 
    AND prevorder.[order] <= [order].[Order] 
    ) AS [Running Order Total] 
    FROM @b [order] 
) AS OrderExtended 
--WHERE [Total Inventory] < [Running Order Total] 
ORDER BY [Planned Shipment Date], [Order], [Line Number], [Location], [Item] ASC 
GO 
--Display outstanding quantity to ship on the temp table 
UPDATE ##TEMP 
SET [Outstanding Qty] = SL.[Outstanding Quantity] 
FROM ##TEMP T, [TRU$Sales Line] SL 
WHERE T.[Order] = SL.[Document No_] 
AND T.[Line Number] = SL.[Line No_] 
GO 

當我運行一個查詢,如:

SELECT * FROM ##TEMP 
WHERE Item = '1011861' 
ORDER BY [Order], [Line Number] 

我得到這樣的事情(不正確運行的總街貨的):

Planned Shipment Date | Location | Item | Order | Line Number | Outstanding Qty | Total Inventory | Running Order Total 
2010-08-20    HQ  1011861 SO18727 6   3     49     103 
2010-09-10    HQ  1011861 SO18727 7   50    49     103 
2010-10-01    HQ  1011861 SO18727 8   34    49     103 
2010-08-20    HQ  1011861 SO18731 6   45    49     174 
2010-09-10    HQ  1011861 SO18731 7   26    49     174 
2010-08-20    HQ  1011861 SO19268 1   1     49     175 
2010-08-26    HQ  1011861 SO20476 8   1     49     176 
2010-08-26    HQ  1011861 SO20552 4   1     49     177 
2010-08-27    HQ  1011861 SO20630 8   2     49     179 

什麼我期待的是類似的(真正的運行總數優秀的數量):

Planned Shipment Date | Location | Item | Order | Line Number | Outstanding Qty | Total Inventory | Running Order Total 
2010-08-20    HQ  1011861 SO18727 6   3     49     3 
2010-09-10    HQ  1011861 SO18727 7   50    49     53 
2010-10-01    HQ  1011861 SO18727 8   34    49     87 
2010-08-20    HQ  1011861 SO18731 6   45    49     132 
2010-09-10    HQ  1011861 SO18731 7   26    49     158 
2010-08-20    HQ  1011861 SO19268 1   1     49     159 
2010-08-26    HQ  1011861 SO20476 8   1     49     160 
2010-08-26    HQ  1011861 SO20552 4   1     49     161 
2010-08-27    HQ  1011861 SO20630 8   2     49     163 

看起來,如果訂單中包含不同的裝運日期(每個訂單不止一行),則會拋出我的查詢。我錯過了什麼?我已經看了這麼多,我擔心我看不到明顯的解決方案。

感謝您的幫助, 道格

回答

0

你必須限制[行號]當prevorder.Order = [爲了] .Order:

(SELECT SUM(QuantityUsed) FROM @b prevorder   
WHERE prevorder.item = [order].[Item] AND prevorder.location = [order].Location]   
AND (prevorder.[order] < [order].[Order] OR (prevorder.[order] = [order].[Order]   
AND prevorder.[Line Number] <= [order].[Line Number]))   
AS [Running Order Total] 

這將是更有益的訂購報告按[計劃發貨日期],訂單,[行號]。

(SELECT SUM(QuantityUsed) FROM @b prevorder   
WHERE prevorder.item = [order].[Item] AND prevorder.location = [order].Location] 
AND (prevorder.[Planned Shipment Date] < [order].[Planned Shipment Date] OR 
(prevorder.[Planned Shipment Date] = [order].[Planned Shipment Date]  
AND (prevorder.[order] < [order].[Order] OR (prevorder.[order] = [order].[Order]   
AND prevorder.[Line Number] <= [order].[Line Number])))   
AS [Running Order Total] 

變得太複雜?使用具有#temp表的Identity Column = RecordID intead的表。按照它們出現在報告中的順序插入記錄。

​​