我有一个临时表,其中包含各种类似的产品:
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
条件使用什么语法,但我认为这可能是某个地方要开始的?
答案 0 :(得分:2)
尝试按ProductID进行分区,如下所示:
SUM(item.Quantity) OVER (PARTITION BY ProductID, Order BY item.productCode ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)