2017-10-15 1 views
0

Ich habe eine Tabelle, die ich eine Spalte neu anordnen muss, aber ich muss die ursprüngliche Reihenfolge nach Datum beibehalten.SQL Server - Umnummerierung in Auftrag

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 

Ich möchte mit 1001 bis 1004 neu zu ordnen num_seq starten und die Nummerierung in Ordnung zu halten. Also 111 = 1001 und 112 = 1002 und so weiter. Das ist, was ich habe, so weit:

DECLARE @num INT 
SET @num = 0 
UPDATE Table_1 
SET @num = num_seq = @id + 1 
GO 

Ich weiß, dass UPDATE lässt mich nicht das Schlüsselwort ORDER BY verwenden. Gibt es eine Möglichkeit, dies in SQL 2008 R2 zu tun?

Antwort

1

Stufe der neue num_seq in einem WAK-Unternehmen, setzen dann, dass in Ihrem Update-Anweisung:

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 

Returns:

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 
Verwandte Themen