Je tente de créer une requête qui retournera tous les enregistrements non dupliqués (uniques) dans une table. La requête devra utiliser plusieurs champs pour déterminer si les enregistrements sont dupliqués.
Par exemple, si une table présente les champs suivants; PKID, CLIENTID, NOM, ACCTNO, OrdonnanceDATED, CHARGE, J'aimerais utiliser les champs ACCTNO, OrderDate et chargez-vous pour rechercher des enregistrements uniques. P>
Table P>
PKID-----ClientID-----Name-----AcctNo-----OrderDate-----Charge 2 JX220 Mark 55567 9/9/2010 $23.00 3 JX690 Matt 89899 9/9/2010 $218.00
7 Réponses :
comptez (*) = 1 code> fonctionnera si vous n'incluez que les champs du groupe code> par code> que vous utilisez pour trouver les enregistrements uniques. (c.-à-d. non
pkid code>, mais vous pouvez utiliser
max code> ou
min code> pour retourner cela puisque vous n'aurez qu'un enregistrement par groupe dans le jeu de résultats .) p>
Ok, j'ai couru la requête à nouveau à l'aide de Count = 1 et ça a fonctionné! Pour une raison quelconque quand je le faisais auparavant, il a renvoyé tous les enregistrements. Merci pour le coupez la bonne direction.
SELECT PKID , ClientID , Name , AcctNo , OrderDate , Charge FROM YourTable t1 WHERE NOT EXISTS (SELECT * FROM YourTable t2 WHERE t1.PKID <> t2.PKID AND t1.AcctNo = t2.AcctNo AND t1.OrderDate = t2.OrderDate AND t1.Charge = t2.Charge )
Ajouter simplement:
GROUP BY AcctNo, OrderDate, Charge HAVING COUNT(1) = 1
Merci Kekekela pour le nudge dans la bonne direction.
Voici la requête qui a produit le résultat que je voulais: p> ou plus simplifié en fonction de l'exemple de GUS: < / p>
Vous pouvez simplement supprimer le Note: strong>
Ceci est légèrement différent de ce que vous demandez. Je ne pouvais que voir votre exemple d'être utile si vous essayez de pkid code> pour renvoyer tous les enregistrements:
Il renvoie un ensemble unique en supprimant le champ non unique.
Par votre exemple, vous demandez de retourner des non-duplicats. P>
nettoyer une table en extrayant les "bons" enregistrements. p> p>
Vous pouvez d'abord déterminer les enregistrements non uniques, puis tester ces enregistrements non dans cet ensemble - comme celui-ci La dernière partie de la requête interne vous permet de violouer les critères Pour "Égalité" - Ajoutez le nombre requis de colonnes à tester.
Bien sûr, cela obtient beaucoup plus intéressant sans que la clé primaire :) Dans de tels cas, je finis généralement à créer un p> kétil p> p>
La requête ne doit-elle pas lire > code> ou
<< / code> au lieu de
<> code>? Avec
<> code>, le résultat contiendra aucun i> des lignes dupliquées au lieu d'une seule copie
Non, le <> vous assure que vous ne testez pas un enregistrement contre lui-même - identique à la solution Martin Smiths # 2. A
SELECT GMPS.gen.ProductDetail.PaperType, GMPS.gen.ProductDetail.Size FROM GMPS.gen.ProductDetail GROUP BY GMPS.gen.ProductDetail.PaperType, GMPS.gen.ProductDetail.Size HAVING COUNT(1) = 1;
Pouvez-vous montrer le code que vous utilisez?