我将基于组更新具有连续值的表。
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/