我想学习如何在按照特定顺序(而不是随机或按创建记录的顺序)更新列时处理表行。
为了说明我的问题,在下面的构成示例中,我想根据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
答案 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;