sql - 根据另一个 id 列更新具有(列组值的 max+1)列的脚本
问题描述
如图所示。我有一个带有 Id、OrderId、SubId 的表。其中 SubId 列中的某些行值为零,如图像中的左表所示。我必须按升序将相对于 Id 列的 OrderId 值为 0 的 SubId 行更新为 Max(SubId)+1。结果表将如右图所示。任何朋友请帮助我解决方案或一些建议。
解决方案
您可以使用窗口函数:
with toupdate as (
select t.*,
row_number() over (partition by orderid, subid order by id) as seqnum,
max(subid) over (partition by orderid) as max_orderid
from t
)
update toupdate
set subid = max_orderid + seqnum
where subid = 0;
这是一个 db<>fiddle。
推荐阅读
- sql - 使用 Cpanel 连接到 MSSQL 服务器
- lando - 有没有类似于lando中的docker exec的命令?
- android - 深度链接在 Android 中不起作用。因为我不想使用覆盖方法,我的以下代码看起来像
- git - Visual Studio 2019 16.10.3 中的 Git Diff Tool 设置不起作用
- c# - C# 的 PluralizationService 中是否存在错误,或者我没有正确设置某些内容?
- c++ - 从 QThread 发出的信号从未收到
- python - 如何使用 jupyter notebook 上的 pandas plot 函数绘制数据帧切片的中值和均值?
- android - Android 应用程序未通过 webview SSL Hnadler 的批准
- wpf - 如何在多行文本块的末尾嵌入视觉画笔?
- python - 我正在尝试制作一个 YT api,但每次我得到的都是这个错误:没有这样的文件或目录:'client_secrets_file.json'