gpt4 book ai didi

sql - T SQL 累积减法

转载 作者:行者123 更新时间:2023-12-01 21:56:44 25 4
gpt4 key购买 nike

我正在使用 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

但我收到错误:关键字“OVER”附近的语法不正确。

运行总和是正确的方法吗?

是否最好创建一个由 SKU\Shop\WeekNum\Priority 组成的 key ?

谢谢。

最佳答案

我在这里对您的 PARTITION BYORDER BY 子句做了一些假设,但这会让您得到想要的结果。由于您在 SKU 的第一行中只有 OpeningStock 的值,因此我使用 FIRST_VALUE 获取第一个值,然后取去掉 Replen 的所有 prior 值:

WITH VTE AS(
SELECT *
FROM (VALUES(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))V(SKU,Shop,WeekNum,ShopPrioirty,Replen,OpeningStock))
SELECT V.SKU,
V.Shop,
V.WeekNum,
V.ShopPrioirty,
V.Replen,
V.OpeningStock,
FIRST_VALUE(V.OpeningStock) OVER (PARTITION BY V.SKU ORDER BY V.ShopPrioirty,V.WeekNum ROWS UNBOUNDED PRECEDING) -
ISNULL(SUM(V.Replen) OVER (PARTITION BY V.SKU ORDER BY V.ShopPrioirty,V.WeekNum ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING),0) AS CurrentStock
FROM VTE V;

关于sql - T SQL 累积减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56441047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com