繁体   English   中英

用递增的整数更新表中所有行上的列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM