2011-09-09 4 views
0

J'ai un tableASQL: pointant vers des données en double

ID col1 col2 status 
1 ABC 123 NULL 
2 ABC 214 NULL 
3 BCA 001 NULL 
4 ABC 123 NULL 
5 BWE 765 NULL 
6 ABC 123 NULL 
7 BCA 001 NULL 

Je veux signaler les données en double (de col1, col2) & alimenter la colonne = état avec un message faisant référence à l'ID qui est double. Par exemple, ID = 4 est un doublon d'ID = 1, ID = 6 est un doublon d'ID = 1 et ID 7 est un doublon d'ID = 3. status = "Duplicate of ID = (ID here)" Résultat attendu:

ID col1 col2 status 
    1 ABC 123 NULL 
    2 ABC 214 NULL 
    3 BCA 001 NULL 
    4 ABC 123 Duplicate of ID = 1 
    5 BWE 765 NULL 
    6 ABC 123 Duplicate of ID = 1 
    7 BCA 001 Duplicate of ID = 3 

Je peux signaler les doublons mais je ne peux pas pointer vers les numéros d'identification. Le script que j'ai utilisé est:

WITH CTE_Duplicates1 AS 
    (SELECT ROW_NUMBER() OVER (PARTITION BY col1,col2 
    ORDER BY (SELECT 0)) RN,Status 
    FROM tableA 
) 
UPDATE CTE_Duplicates1 
SET qnxtStatus = 'Duplicate of ID =' 
WHERE RN<>1 

Veuillez corriger. Merci

Répondre

2
;WITH CTE_Duplicates1 AS 
(
SELECT MIN(ID) OVER (PARTITION BY col1, col2) Mn, 
     ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY ID) Rn, 
     * 
FROM tableA  
) 
UPDATE CTE_Duplicates1 
SET qnxtStatus = 'Duplicate of ID =' + CAST(Mn AS VARCHAR(11)) 
WHERE Rn > 1 
+0

Doh - Bien sûr. Doit être commandé spécifiquement non arbitrairement. +1 –

Questions connexes