【发布时间】:2019-10-19 19:35:48
【问题描述】:
我正在使用 MS SQL Server。
我有下表:
SKU Shop WeekNum ShopPrioirty Replen OpeningStock
111 100 1 1 10 5000
111 200 1 2 10 NULL
111 300 1 3 5 NULL
111 400 1 4 8 NULL
222 100 2 1 20 6000
222 200 2 2 15 NULL
222 300 2 3 12 NULL
222 400 2 4 10 NULL
这是想要的结果:
SKU Shop WeekNum ShopPrioirty Replen OpeningStock
111 100 1 1 10 5000
111 200 1 2 10 4990
111 300 1 3 5 4980
111 400 1 4 8 4975
222 100 2 1 20 6000
222 200 2 2 15 5980
222 300 2 3 12 5965
222 400 2 4 10 5953
对于给定的一周,一个 SKU 存在于多个商店中并被分配了一个优先级。在优先级 1 中分配期初库存。
但是,我需要更新期初库存(当前为 NULL)以等于之前的期初库存减去之前的补货。
在我尝试更新之前,我尝试只做一个 SELECT
SELECT SKU
,Shop
,WeekNum
,StorePriority
,Replen
,OpeningStock
,OpeningStock - Replen OVER (ORDER BY SKU,Shop,WeekNum ROWS UNBOUNDED PRECEDING) AS Opening
FROM [table1] t
但我收到错误消息:Incorrect syntax near the keyword 'OVER'.
运行总和是正确的方法吗?
最好创建一个由 SKU\Shop\WeekNum\Priority 组成的密钥吗?
谢谢。
【问题讨论】:
-
您缺少聚合函数。我假设你的意思是
- SUM(Replen)而不是- Replen -
如果我将其更改为 SUM(Replen) 那么它只返回 1 个 OpeningStock 数字 - 我需要它运行
-
鉴于每个
SKU严格来说有一个非空OpeningStock,一个选项是isnull(OpeningStock, sum(OpeningStock) over (partition by SKU) - sum(Replen) over (partition by SKU order by shop, weeknum, priority /* ?? */ rows between unbounded preceding and 1 preceding))。 -
@GSerg 嗨 - 这不太正确。不过,我不想减去 Replen 的总和。它只需要是之前的 OpeningStock 减去之前的 Replen。
-
@Michael 数学上是一样的。
标签: sql sql-server tsql cumulative-sum