2017-10-15 122 views
0

我有一張表,我需要重新排列一列,但我需要按日期保留原始順序。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中做到這一點?

回答

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