如何以特定顺序进行SQL更新

时间:2015-03-08 14:24:22

标签: sql sql-server tsql sql-update

我想学习如何在按照特定顺序(而不是随机或按创建记录的顺序)更新列时处理表行。

为了说明我的问题,在下面的构成示例中,我想根据date_time设置排名,以便首先处理旧记录(并获得较低排名)。

create table #testTable (customer_id char(20), ranking int, date_time
Datetime, pk_value int identity )
go

insert into #testTable (customer_id, date_time) values 
('MICROSOFT', '20110202')
insert into #testTable (customer_id, date_time) values 
('MICROSOFT', '20120202')
insert into #testTable (customer_id, date_time) values
('MICROSOFT', '20090512')
go
declare @Rank int
set @Rank = 0
update #testTable set @Rank = @Rank + 1, ranking = @Rank 

1 个答案:

答案 0 :(得分:3)

看起来您正在使用SQL Server。如果是这样,您可以使用(适当命名的)排名函数设置排名:

with toupdate as (
      select t.*, row_number() over (order by date_time) as seqnum
      from #testtable t
     )
update toupdate
    set ranking = seqnum;