web-dev-qa-db-fra.com

Mettre à jour l'un des 2 doublons dans une table de base de données du serveur SQL

J'ai une table qui a une colonne avec des valeurs en double. Je souhaite mettre à jour l'une des deux valeurs dupliquées, par exemple row1 = tom et row2 = tom .. Je souhaite ajouter un 1 ou un a à l'une d'entre elles et ce sera pour de nombreux autres doublons dans la même colonne. Fondamentalement, il suffit d’ajouter un chiffre ou une lettre à chaque 1 des doublons pour qu’il n’y ait plus de doublons. 

J'ai eu cette requête qui mettra à jour tous les doublons mais pas l'un d'entre eux. Quelqu'un peut-il aider?

UPDATE Table1
   SET Column1 = 'a'
 WHERE exists
       (SELECT Column1 , COUNT(Column1 )
FROM Clients
GROUP BY Column1 
HAVING ( COUNT(Column1 ) > 1)
)
15
MohammedT

Essayez ceci avec CTE et PARTITION BY

;WITH cte AS
(
  SELECT
      ROW_NUMBER() OVER(PARTITION BY Column1  ORDER BY Column1 ) AS rno,
      Column1 
  FROM Clients
)

UPDATE cte SET Column1 =Column1 +' 1 '
WHERE rno=2
37
Nithesh

Je pense que cette simple mise à jour est ce que vous recherchez.

UPDATE Table1 SET Column1=Column1+CAST(id AS VARCHAR)
WHERE id NOT IN (
  SELECT MIN(id) 
  FROM Table1
  GROUP BY Column1
);

Contribution:

(1,'A'),
(2,'B'),
(3,'A'),
(4,'C'),
(5,'C'),
(6,'A');

Sortie:

(1,'A'),
(2,'B'),
(3,'A3'),
(4,'C'),
(5,'C5'),
(6,'A6');

Un SQLfiddle à tester avec .

5
Joachim Isaksson

Supposez Table1, contenant les informations suivantes:

Column1      
========  
tom        
john   
jack    
tom     
james
jane 

Notez que les première et quatrième lignes sont identiques. Voici la commande UPDATE pour changer le nom dans un seul d'entre eux.

UPDATE Table1 AS t1
   SET Column1 = 'jennifer'
 WHERE rrn(t1) =
       (SELECT MAX(rrn(t2))
          FROM Table1 AS t2
         WHERE Column1 = 'tom')

Et le résultat serait

Column1      
========  
tom        
john   
jack    
jennifer
james
jane 

avec la fonction RRN, vous pouvez mettre à jour la dernière occurrence d'un enregistrement en double

3
zkanoca

Je pense que vous pouvez utiliser l'opérateur TOP () au lieu de la méthode row_number (), cela vous aidera à en mettre à jour un facilement 

UPDATE TOP ( 1 )Table1 SET Column1 = 'a';
3
MZT

Essayez ce compagnon

UPDATE Table1 
SET Column1 = column1 +'a'   
WHERE exists(
        select row 
        from (
            SELECT 
                Column1 , 
                Row_Number() over(Partition by Column1 order by Column1) as row 
            FROM Clients
        ) as subquery 
        where subquery.row = 2
    )
0
zxc
UPDATE table1
SET STATUS = 'F'
WHERE column1= 
   (SELECT (column1)
    FROM table1
    GROUP BY column1 
    HAVING (COUNT(column1 ) > 1))
0
Faiz Shaikh

essaye ça 

with test as 
(
   select ROW_NUMBER() over (order by salary)rr, salary , emp_no 
   from salary
)update test set emp_no=10007 where emp_no='10002'  and rr=3
0
Nivedita

Je devais mettre le avec dans un depuis puisque mon développeur SQL n'a pas aimé mettre à jour un avec Copier à partir de la réponse de Nithesh

ça a fini par ressembler à ça:

UPDATE Clients 
SET Column1 = 'a'
WHERE ColumnID IN (select ColumnID from 
 (  
 SELECT
       row_number() OVER(PARTITION BY Column1  ORDER BY Column1 ) AS rno,
       ColumnID FROM Clients
 )
                   where rno=2   
                  )
0
Borja