2013-01-16 3 views
0

J'ai le tableau suivant, et je veux mettre la valeur de la colonne supprimée à zéro pour un seul des enregistrements qui ont des noms en double.Définir la valeur de la colonne sur 0 pour un seul des enregistrements en double?

id  name  deleted 
------------------------ 
1  a   1 
2  a   1 
3  a   1 
4  b   1 
5  c   1 
6  d   1 

de sorte que la sortie sera:

id  name  deleted 
------------------------ 
1  a   0 
2  a   1 
3  a   1 
4  b   0 
5  c   0 
6  d   0 
+0

[Qu'avez-vous essayé?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+1

Quels rdbms utilisez-vous? –

+0

mise à jour de la table avec une sélection interne, mais pas de chance – Xerxes

Répondre

3

Si votre DBMS est SQL-Server (> = 2005), vous pouvez utiliser un CTE avec ROW_NUMBER:

WITH CTE AS 
(
    SELECT ID, Name, Deleted, 
    RN = ROW_NUMBER() OVER(PARTITION BY name ORDER BY ID) 
    FROM dbo.T 
) 
UPDATE CTE 
SET Deleted = 0 
WHERE RN = 1 

DEMO

0
UPDATE A 
SET A.deleted = 0 
FROM Tbl A 
    LEFT JOIN Tbl B 
    ON A.Name = B.Name 
     AND A.Id > B.Id 
WHERE B.Id IS NULL 
1
UPDATE Tbl SET deleted = 0 WHERE id IN 
(SELECT MIN(id) FROM Tbl GROUP BY name) 
Questions connexes