2015-01-08 4 views
1

Я добавил новый столбец в таблицу. Теперь я хочу обновить этот столбец со значениями из функции row_number(). И я хочу сделать это, потому что хочу удалить повторяющиеся записи. Указанный ниже код не дает желаемого результатКак обновить столбец с помощью ROW_NUMBER() в SQL

UPDATE tab1 
SET rownumber = (SELECT ROW_NUMBER() OVER(ORDER BY name ASC) 
      FROM tab1 AS a WHERE a.name = b.name) 
FROM tab1 b 

Проблема заключается в том, что, когда новый столбец добавляется в таблице ее значение равно нуль. Вставка в добавляет новые строки в таблицу, но не заменяет нули. Как обновить нулевые значения номерами строк, сгенерированными функцией ROW_NUMBER().

указанной ниже таблице это то, что я есть

имя оценка

Банк Америки 10

Commerce Bank 20

Wells Fargo Bank 135

Bank Midwest 45

Банк Америки 10

Commerce Bank 20

теперь я хочу, выход, как после удаления дубликатов

имени оценки

Банка Америки 10

Commerce Bank 20

Wells Fargo Bank 135

Bank Midwest 45

Я пытаюсь добавить новый столбец с уникальными значениями, чтобы получить желаемый результат.

+0

У вас нет какого-либо столбца первичного ключа, определенного в таблице? – Vivek

+0

Я забыл упомянуть, что эта таблица содержит повторяющиеся записи с двумя именами столбцов и идентификатором, а третий столбец столбца добавляется в таблицу – sam

+0

НЕТ первичного ключа в таблице – sam

ответ

4

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

UPDATE T 
SET T.rownumber = TT.ROW_ID 
FROM tab1 AS T 
INNER JOIN (SELECT ROW_NUMBER() OVER (ORDER BY name) AS ROW_ID 
        ,name 
      FROM Tab1) AS TT 
    ON T.name = TT.name 
+0

@sam Я пробовал это на SSMS, и он отлично работает. – dario

+0

@sam Вы имеете в виду, что 'name' является' NULL'? – dario

+0

мои извинения ... причина ошибки заключается в том, что столбец имен имеет повторяющиеся записи и с внутренним объединением итоговых записей, чтобы стать больше. Для ex, если есть 3 записи, и из них 3 дублируется, тогда внутреннее соединение даст 4 записи, а не 3 – sam

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