gpt4 book ai didi

具有累积值的 SQL 更新表

转载 作者:行者123 更新时间:2023-12-02 08:32:48 25 4
gpt4 key购买 nike

我有这张表:

Date  |StockCode|DaysMovement|OnHand
29-Jul|SC123 |30 |500
28-Jul|SC123 |15 |NULL
27-Jul|SC123 |0 |NULL
26-Jul|SC123 |4 |NULL
25-Jul|SC123 |-2 |NULL
24-Jul|SC123 |0 |NULL

只有顶行有 OnHand 值的原因是因为我可以从另一个存储任何股票代码的当前手头数量的表中获取该值。

表中的其他记录取自另一个记录任何给定日期所有移动的表。

我想更新上表,以便 OnHand 列根据先前记录的库存和移动显示该行日期的 QtyOnHand,这样在更新结束时看起来像这样:

Date  |StockCode|DaysMovement|OnHand
29-Jul|SC123 |30 |500
28-Jul|SC123 |15 |470
27-Jul|SC123 |0 |455
26-Jul|SC123 |4 |455
25-Jul|SC123 |-2 |451
24-Jul|SC123 |0 |453

我目前正在使用 CURSOR 实现此目的。但是性能真的很糟糕,超过了数千条记录。

我可以运行一些基于 SET 的 UPDATE 语句来获得相同的结果吗?

最佳答案

试试这个 ( Fiddle demo )

DECLARE @Movement INT , @OnHandRunning INT  

;WITH CTE AS
(
SELECT TOP 100 percent DaysMovement, OnHand
FROM Table1
ORDER BY [StockCode], [Date] DESC
)
UPDATE CTE SET @OnHandRunning = OnHand = COALESCE(@OnHandRunning - @Movement, OnHand),
@Movement = DaysMovement

更新:对于多个 StockCodes,您可以修改上面的查询,如下所示 ( Fiddle demo 2 ):

DECLARE @Movement INT , @OnHandRunning INT, @StockCode VARCHAR(10) = '' 

;WITH CTE AS
(
SELECT TOP 100 percent DaysMovement, OnHand, StockCode
FROM Table1
ORDER BY [StockCode],[Date] DESC
)
UPDATE CTE SET @OnHandRunning = OnHand =
CASE WHEN @StockCode<> StockCode THEN OnHand ELSE @OnHandRunning - @Movement END,
@Movement = DaysMovement,
@StockCode = StockCode

关于具有累积值的 SQL 更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25010794/

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