我有一个表需要重新排序列,但我需要按日期保留原始顺序。
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中执行此操作?
答案 0 :(得分:1)
在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