0

Je voudrais vous demander de supprimer les doublons mais rester le spécifique.supprimer dupliquer en considérant des critères spécifiques

SerWorkNumber is du

s'il y a un "FD" dans le type le code ne doit pas supprimé.

Je serais très apprecated pour toute aide. Je stucked dans :(Merci

+0

Quelle version de SQL utilisez-vous? –

+0

Merci @Tim Biegeleisen. ı utilisé Msaccess – Sero

+0

Le code que j'ai écrit est > SUPPRIMER CD_FD. [SerWorkNumber], CD_FD. [SerialNo], CD_FD. [ServiceCenter], CD_FD. [ReceivedDate], CD_FD. [Type] DE CD_FD OU (((CD_FD. [SerWorkNumber]) In (SELECT [SerWorkNumber] FROM [CD_FD] Comme Tmp GROUP BY [SerWorkNumber] Compte HAVING (*)> 1)) ET ((CD_FD. [Type]) = "CD")); – Sero

Répondre

0

la manière la plus simple, est d'avoir un identifiant unique sur chaque ligne. Donc, si vous ne possédez pas déjà un, créez une nouvelle colonne appelée « row_id » et réglez Pour enregistrer la table, vous devez maintenant avoir un identifiant unique sur chaque ligne

Ensuite, vous pouvez construire un grand sql laid pour faire ce dont vous avez besoin, mais si votre table est grande, elle ne fonctionnera pas bien Il est donc préférable d'utiliser une table temporaire pour enregistrer les lignes dupliquées, puis de la référencer pour votre instruction delete

Identifiez d'abord les doublons et stockez l'ID de ligne min

SELECT a.SerWorkNumber, a.SerialNo, a.Type, Min(a.row_id) AS MinOfrow_id INTO CD_FD_Dups 
FROM CD_FD AS a 
GROUP BY a.SerWorkNumber, a.SerialNo, a.Type 
HAVING count(1) > 1; 

suivant, supprimer de la table réelle faisant référence à la table temporaire créé ci-dessus:

DELETE 
FROM CD_FD AS a 
WHERE EXISTS (
SELECT 1 
FROM CD_FD_Dups d 
WHERE d.SerWorkNumber = a.SerWorkNumber 
     and d.SerialNo = a.SerialNo 
     and d.Type = a.Type 
     and a.row_id > d.MinOfrow_id 
);