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)
)
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
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');
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
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';
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
)
UPDATE table1
SET STATUS = 'F'
WHERE column1=
(SELECT (column1)
FROM table1
GROUP BY column1
HAVING (COUNT(column1 ) > 1))
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
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
)