2016-11-30 2 views
1

Я добавил целую строку SortNo в существующую таблицу SQL.Заполните новый столбец SQL с восходящими целыми числами с порядком

Теперь я хочу, чтобы заполнить новый столбец integerSortNo с целыми числами роста на 10 (10, 20, 30, ...), но я хочу, чтобы строки заказать другой nvarchar колонке Name.

Я не могу использовать Update, так как он установил бы SortNo в случайном порядке, а не по заказу Name.

Итак, как я могу заполнить SortNo по заказу Name?

+1

ROW_NUMBER() * 10 с ORDER BY Name является то, что моя кишка говорит –

ответ

4

Вы можете сделать это с помощью обновляемого КТР и оконные функции:

with toupdate as (
     select t.*, 
      row_number() over (order by [Name]) as seqnum 
     from t 
    ) 
update toupdate 
    set sortno = 10 * seqnum; 
+0

Спасибо - Не указано ли имя таблицы или переполнено? – Sam

+0

Я просто попробовал оба - t имя таблицы. Я добавил paratheses к [name], так как имя - это ключевое слово в SQL. – Sam

+1

't' - это название таблицы. 'toupdate' - это CTE. –

1

Попробуйте это ..

 UPDATE x 
     SET x.[SortNo] = x.[SortNo] 
     FROM (
       SELECT *, ROW_NUMBER() OVER (ORDER BY [Name]) * 10 AS [SortNo] 
       FROM table  
      ) x 
Смежные вопросы