Sql server OVER(order by)语句中的Where子句?
我有一个临时表,其中填充了如下各种产品:Sql server OVER(order by)语句中的Where子句?,sql-server,sql-server-2014,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
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 | null
003 | 00001 | 2 | 3 | 2
SUM(item.Quantity) OVER (PARTITION BY ProductID, Order BY item.productCode ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
这就形成了这样的表格:
LineID | ProductCode | Quantity | Available | RunningTotal
001 | 00001 | 2 | 3 | null
002 | 00002 | 2 | 3 | 2
003 | 00001 | 2 | 3 | 4
我现在遇到的问题是,我希望运行总数只计算匹配的产品ID,但它将添加每个产品。该表应如下所示:
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 | null
003 | 00001 | 2 | 3 | 2
SUM(item.Quantity) OVER (PARTITION BY ProductID, Order BY item.productCode ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
但我似乎不知道如何将此行更改为仅按productID分组
SUM(item.Quantity)(按item.productCode行排序,在无界的前一行和前一行之间)
更改为Group By
将阻止我使用ROWS BETHEN
子句。
我不想求
SUM
distinct item.quantity值,但我无法将其更改为distinct item.productCode值,因为我需要求和数量。我不确定Order By之后的WHERE
条件可以使用什么语法,但我认为这可能是一个开始?尝试按ProductID进行分区,如下所示:
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 | null
003 | 00001 | 2 | 3 | 2
SUM(item.Quantity) OVER (PARTITION BY ProductID, Order BY item.productCode ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
尝试按ProductID进行分区,如下所示:
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 | null
003 | 00001 | 2 | 3 | 2
SUM(item.Quantity) OVER (PARTITION BY ProductID, Order BY item.productCode ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
效果很好,只是我必须去掉条件之间的逗号
partitionbyitem.productCode orderbyitem.productCode
效果很好,只是我必须删除条件之间的逗号<代码>按项目划分。产品代码按项目排序。产品代码