gpt4 book ai didi

sql-server - 用前一行更新记录

转载 作者:行者123 更新时间:2023-12-05 01:20:08 25 4
gpt4 key购买 nike

我有一种情况需要用前一行值更新记录。

来源:

|MatId | BaseId |Flag|Pkg1| CS1
--------------------------------
|3001 | 3001 | 1 | 20 | 2 |
|3002 | 3001 | 0 | 15 | 3 |
|3003 | 3001 | 0 | 10 | 4 |

这里3001(MatID)和3001(BaseID)是一样的所以FLAG =1,在下一条记录中只有 BASEID 相同。输出应该只有 PKG1 字段用当前行值更新。

目标或输出:

|MatId | BaseId|Flag|Pkg1|CS1
------------------------------
|3001 | 3001 | 1 | 20 | 2|
|3002 | 3001 | 0 | 20 | 3|
|3003 | 3001 | 0 | 20 | 4|

如上面的目标所示,我必须使用第一个记录 20 中的值更新 PKG1 中的两个值。Pkg1 也有很多列,如何使用单个查询更新所有列?

非常感谢任何帮助。
谢谢。

最佳答案

LEAD 的帮助下获取 Previous 和 Next 值和 LAG SQL Server 中的函数非常简单。如果您使用的 SQL Server 版本低于 2012,它不支持 LEADLAG我们可以使用的函数ROW_NUMBER() .

尝试使用这样的东西:

;WITH t AS
(
select LAG(MatId) OVER (ORDER BY MatId) AS previousMatId
, BaseId
, MatId
from TABLE
)
update tab
set tab.Pkg1 = p.Pkg1
from TABLE tab
inner join t on tab.MatId = t.MatId and t.BaseId = t.previousMatId
left join (select MatId AS MatId
, ISNULL(LAG(Pkg1) OVER (ORDER BY MatId), Pkg1) AS Pkg1
from TABLE) p on t.MatId = p.MatId

关于sql-server - 用前一行更新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33402252/

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