[英]Updating a column on all rows in a table with an incrementing integer
我有2列的表格:
name | order
------------
foo 0
bar 0
john 0
doe 0
我想创建一个SQL更新,将按名称列对它们进行排序,例如:
name | order
------------
foo 2
bar 0
john 3
doe 1
这是用于SQL Server。
我已经看到类似的东西适用于插入,但是显然不适用于更新。
insert into [dbo].[MyTable](Order)
select row_number() over (order by Name)
FROM [dbo].[MyTable]
使用row_number()
:
select
name
, row_number() over (order by name)-1 as [order]
from t
更新:使用公用表表达式(cte)
;with cte as (
select
name
, [order]
, row_number() over (order by name)-1 as [NewOrder]
from t
)
update cte
set [order] = NewOrder;
extrester演示: http ://rextester.com/VSF47884
返回:
+------+-------+
| name | order |
+------+-------+
| foo | 2 |
| bar | 0 |
| john | 3 |
| doe | 1 |
+------+-------+
您可以跳过公用表表达式,而仅使用子查询,但是我认为使用cte读取起来更容易。
update s
set [order] = NewOrder
from (
select
name
, [order]
, row_number() over (order by name)-1 as [NewOrder]
from t
) as s
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.