我将基于组更新具有连续值的表。

   ItemNo       Group
  ---------------------
   null         group1
   null         group1
   null         group2
   null         group2
   null         group1
   null         group2
   null         group1
   null         group2
   null         group1

这是一个示例表。
我正在尝试按组设置具有连续值的ItemNo字段。
因此它将设置为这样。
   ItemNo       Group
  ---------------------
   1            group1
   2            group1
   1            group2
   2            group2
   3            group1
   3            group2
   4            group1
   4            group2
   5            group1

我尝试使用此查询来设置值而不考虑组。
DECLARE @id int
SET @id = 0

UPDATE table
SET @id = ItemNo = @id + 1

我怎么解决这个问题?

谢谢。

最佳答案

SQL表表示无序集。您的分配似乎取决于行的顺序。为了执行您想要的操作,您需要一个订购栏。

如果有的话,可以使用空白和孤岛技术和可更新的CTE:

with toupdate as (
      select t.*,
             row_number() over (partition by group, seqnum - seqnum_g order by <ordering col>) as new_itemno
      from (select t.*,
                   row_number() over (order by <ordering col>) as seqnum,
                   row_number() over (partition by group order by <ordering col>) as seqnum_g
            from t
           ) t
     )
update toupdate
    set itemno = new_itemno;

关于sql - 如何通过GROUP更新具有连续值的列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56752278/

10-09 19:39