2008-11-26 8 views
2

J'ai une table avec des lignes en double. Je veux modifier uniquement les lignes en double comme suit.SQL: Comment ajouter des ID aux lignes avec des valeurs en double

Avant:

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

Après:

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

Col1 est ajouté avec un trait d'union et la valeur de la colonne id.

+0

Um, qui ne fait pas cents . – BCS

+0

Demandez-vous une instruction SQL pour identifier et modifier les lignes en double? – johnc

+0

Et s'il y a plus de 2 copies? if (4, 'vvvv') était la prochaine rangée que voudriez-vous voir? – Unsliced

Répondre

0

Vous pourriez être en mesure de le faire avec un sproc et des curseurs. Je ne pense pas que ce soit possible dans toute requête select raisonnable.

0

Vous pouvez accomplir ceci avec un processus en 2 étapes, bien qu'un assistant SQL puisse probablement le modifier pour vous donner une solution en une seule étape.

Vous devez d'abord obtenir toutes les valeurs en double. Voici une requête SQL qui le fera:

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

Cela vous donnera une liste de résultats le nombre de doublons et la valeur en double.

Dans l'étape 2, vous parcourez ce résultat, récupérez la valeur col1, renvoyez tous les enregistrements contenant cette valeur et (éventuellement en utilisant une variable de compteur de boucle) modifiez la valeur selon votre exemple.

Remarque: vous n'avez pas vraiment besoin de renvoyer le nombre de doublons pour atteindre votre objectif, mais cela vous aidera à tester la requête et à vous assurer qu'elle fonctionne.

2

Vérifiez IN dans Oracle Syntax. La requête n'a pas été testé

update table1 set 
col1 = col1 || id 
where 
id not in (
select min(id) from table1 
groupby col1 
) 
6

Cette SQL ne fera que mettre à jour les doublons, mais pas celui avec le plus bas id:

update tbl 
    set col1 = col1 + '-' + convert(varchar, id) 
    where exists(select * from tbl t where t.col1 = tbl.col1 and t.id < tbl.id) 
Questions connexes