2012-05-04 67 views
3

我有一個項目列表,我需要重新排序,沒有空白。一開始會:SQL重新序列記錄

ID Sequence 
123 1 
125 2 
155 3 
158 4 
165 6 
170 9 

我需要到結束(注意順序6個變爲5和序列9對6)

ID Sequence 
123 1 
125 2 
155 3 
158 4 
165 5 
170 6 

我已經使用這個update語句

嘗試
UPDATE tblA 
SET  tblA.Sequence = temp.Sequence 
FROM (SELECT id , 
        ROW_NUMBER() OVER (ORDER BY Sequence, ID) AS Sequence 
      FROM  dbo.tblA 
     ) AS temp 

但我剛剛結束了......

ID Sequence 
123 1 
125 1 
155 1 
158 6 
165 6 
170 6 

從更新中提取select語句會產生正確的結果。 將其更改爲類似

UPDATE tblA 
SET tblA.Sequence = temp.NewSequence 
FROM (SELECT id , 
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY Sequence, id) 
                   AS NewSequence 
      FROM  dbo.tblA 
     ) AS temp 

生成結果

ID Sequence 
123 1 
125 1 
155 1 
158 1 
165 1 
170 1 

我在做什麼錯?

回答

4

您需要將重新編號的設置與您原來設置的ID相關聯,否則你有從您的臨時設置一些其他的ID序列號更新原始ID:

UPDATE a 
SET a.Sequence = temp.Sequence 
FROM  
    tblA a JOIN 
    (
     SELECT id, ROW_NUMBER() OVER (ORDER BY Sequence, ID) AS Sequence 
     FROM dbo.tblA 
    ) AS temp ON temp.ID = a.ID 
+0

那是什麼我需要。謝謝! – JupiterP5