SQL Server - 重新编号为
问题描述:
我有一张表,我需要重新排列一列,但我需要按日期保留原始顺序。SQL Server - 重新编号为
TABLE_1
id num_seq DateTimeStamp
fb4e1683-7035-4895-b2c8-d084d9b42ce3 111 08-02-2005
e40e4c3e-65e4-47b7-b13a-79e8bce2d02d 114 10-07-2017
49e261a8-a855-4844-a0ac-37b313da2222 113 01-30-2010
6c4bffb7-a056-4a20-ae1c-5a31bdf683f2 112 04-15-2006
我想重新排列从1001到1004开始的num_seq,并按顺序保持编号。所以111 = 1001和112 = 1002等等。 这是我到目前为止有:
DECLARE @num INT
SET @num = 0
UPDATE Table_1
SET @num = num_seq = @id + 1
GO
我知道UPDATE
并不让我使用关键字ORDER BY
。有没有办法在SQL 2008 R2中做到这一点?
答
阶段的一个CTE新num_seq
,然后利用在你的更新语句:
declare @Table_1 table (id uniqueidentifier, num_seq int, DateTimeStamp datetime);
insert into @Table_1
values
('fb4e1683-7035-4895-b2c8-d084d9b42ce3', 111, '08-02-2005'),
('e40e4c3e-65e4-47b7-b13a-79e8bce2d02d', 114, '10-07-2017'),
('49e261a8-a855-4844-a0ac-37b313da2222', 113, '01-30-2010'),
('6c4bffb7-a056-4a20-ae1c-5a31bdf683f2', 112, '04-15-2006');
;with stage as
(
select *,
num_seq_new = 1000 + row_number()over(order by DateTimeStamp asc)
from @Table_1
)
update stage
set num_seq = num_seq_new;
select * from @Table_1
返回:
id num_seq DateTimeStamp
FB4E1683-7035-4895-B2C8-D084D9B42CE3 1001 2005-08-02 00:00:00.000
E40E4C3E-65E4-47B7-B13A-79E8BCE2D02D 1004 2017-10-07 00:00:00.000
49E261A8-A855-4844-A0AC-37B313DA2222 1003 2010-01-30 00:00:00.000
6C4BFFB7-A056-4A20-AE1C-5A31BDF683F2 1002 2006-04-15 00:00:00.000