SQL: как добавить идентификаторы в строки с повторяющимися значениями - PullRequest
3 голосов
/ 26 ноября 2008

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

До:

id     col1
------------
1      vvvv
2      vvvv
3      vvvv

После того, как:

id     col1
------------
1      vvvv
2      vvvv-2
3      vvvv-3

К столбцу Col1 добавляется дефис и значение столбца id.

Ответы [ 4 ]

7 голосов
/ 26 ноября 2008

Этот SQL будет обновлять только дубликаты, но не тот, с наименьшим идентификатором:

update tbl
  set col1 = col1 + '-' + convert(varchar, id)
  where exists(select * from tbl t where t.col1 = tbl.col1 and t.id < tbl.id)
2 голосов
/ 26 ноября 2008

Проверьте IN в синтаксисе Oracle. Запрос не проверен

update table1 set
col1 = col1 || id
where
id not in (
select min(id) from table1
groupby col1
)
0 голосов
/ 26 ноября 2008

Это можно сделать с помощью двухэтапного процесса, хотя мастер SQL, вероятно, может изменить это, чтобы дать вам решение за один шаг.

Сначала вам нужно получить все повторяющиеся значения. Вот SQL-запрос, который сделает это:

SELECT     COUNT(*) AS NumberOfDuplicates, col1
FROM         Table1
GROUP BY col1
HAVING      (COUNT(*) > 1)

Это даст вам набор результатов с указанием количества дубликатов и значения дубликата.

На шаге 2 вы должны пройти через этот набор результатов, получить значение col1, вернуть все записи, содержащие это значение, и (возможно, с помощью переменной счетчика цикла) изменить значение в соответствии с вашим примером.

Примечание: вам не нужно возвращать количество дубликатов для достижения вашей цели, но это поможет вам проверить запрос и убедиться, что он работает.

0 голосов
/ 26 ноября 2008

Вы можете сделать это с помощью sproc и курсоров. Я не думаю, что это возможно в любом разумном запросе выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...