TSQL - UPDATE语句中的自增:

5

SQL Server 2005

我有一个包含以下内容的表:

[order_id]     [index_1]
600020001      0
600020002      0
600020002      0
600020002      0
600020003      0
...
需要更新为:-
[order_id]     [index_1]
600020001      1
600020002      1
600020002      2
600020002      3
600020003      1  
我正在尝试编写一个UPDATE语句,根据上面的示例填充index_1字段。我可以使用CURSOR实现这一点,但如果可能的话,最好不要使用它。 对于每个新的order_id,编号重新开始。对于每个order_id行,index_1字段递增1。 是否可以不使用游标来完成这个操作?
1个回答

13

你可以使用CTErow_number()来实现你想要的功能。下面代码中的表格@T仅用于演示。将@T替换为你的表格名称。

declare @T table ([order_id] int, [index_1] int)

insert into @T values
(600020001,      0),
(600020002,      0),
(600020002,      0),
(600020002,      0),
(600020003,      0)

;with cte as
(
  select index_1,
         row_number() over(partition by order_id order by (select 1)) as rn
  from @T       
)
update cte 
  set index_1 = rn

select *
from @T

结果:

order_id    index_1
----------- -----------
600020001   1
600020002   1
600020002   2
600020002   3
600020003   1

1
使用 row_number() over(partition by..) 得到 +1。在这里非常适合。 - Adriano Carneiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,