首页 > 解决方案 > 根据另一个 id 列更新具有(列组值的 max+1)列的脚本

问题描述

在此处输入图像描述

如图所示。我有一个带有 Id、OrderId、SubId 的表。其中 SubId 列中的某些行值为零,如图像中的左表所示。我必须按升序将相对于 Id 列的 OrderId 值为 0 的 SubId 行更新为 Max(SubId)+1。结果表将如右图所示。任何朋友请帮助我解决方案或一些建议。

标签: sqlsql-server

解决方案


您可以使用窗口函数:

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。


推荐阅读