2017-08-16 120 views
0

我有獲取各種產品填充像這樣的臨時表:OVER(order by)語句中的Where子句?

DECLARE @temp TABLE (ID int, productCode int, quantity int, Available bit, RunningTotal int) 
    INSERT INTO @temp (ID, productCode, quantity, Available, RunningTotal) 
    SELECT 
     item.ID 
     , item.ProductCode 
     , item.Quantity 
     , item.available 
     , SUM(item.Quantity) OVER (Order BY item.productCode ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) 
    FROM dbo.item 

導致這個還挺表:

LineID | ProductCode | Quantity | Available | RunningTotal 
001  | 00001 | 2  | 3  |  null 
002  | 00002 | 2  | 3  |  2  
003  | 00001 | 2  | 3  |  4 

我現在的問題是,我想運行總計只計算匹配的產品ID,但它會添加每個產品。該表應該看起來像這樣:

LineID | ProductCode | Quantity | Available | RunningTotal 
001  | 00001 | 2  | 3  |  null 
002  | 00002 | 2  | 3  |  null  
003  | 00001 | 2  | 3  |  2 

但我似乎無法弄清楚如何將此行更改爲僅由productID組?

SUM(item.Quantity) OVER (Order BY item.productCode ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)

更改爲Group By阻止我使用ROWS BETWEEN條款。 我並不是想要SUM不同的item.quantity值,但我無法將其更改爲不同的item.productCode值,因爲我需要總結這些數量。我不確定在Order By之後我可以使用什麼語法來處理WHERE條件,但是我想這可能是開始的地方?

回答

2

試圖通過產品ID來劃分,像這樣:

SUM(item.Quantity) OVER (PARTITION BY ProductID, Order BY item.productCode ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) 
+0

偉大的工作,除了我不得不刪除的條件之間的逗號。 'PARTITION BY item.productCode ORDER BY item.productCode' – Wompguinea