2017-08-16 161 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