2012-05-04 3 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 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 

Вытягивание выражения выбора из обновления дает правильные результаты. Изменение его к чему-то вроде

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 из вашей темп набора:

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

Смежные вопросы