OVER(order by)语句中的Where子句?

时间:2017-08-16 04:38:34

标签: sql-server sql-server-2014

我有一个临时表,其中包含各种类似的产品:

    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   

但我似乎无法弄清楚如何将此行更改为仅按产品ID分组?

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条件使用什么语法,但我认为这可能是某个地方要开始的?

1 个答案:

答案 0 :(得分:2)

尝试按ProductID进行分区,如下所示:

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