55 votes

Trouver les entrées en double dans une colonne

J'écris cette requête pour trouver les enregistrements CTN en double dans la table 1. Je pense donc que si le CTN_NO apparaît plus de deux fois ou plus, je veux qu'il apparaisse en haut de la liste dans mon instruction SELECT *.

J'ai essayé la logique de sous-requête suivante mais j'ai besoin de pulls

  SELECT *
         table1 
   WHERE S_IND='Y'
     and CTN_NO = (select CTN_NO 
                     from table1 
                    where S_IND='Y' 
                      and count(CTN_NO) < 2);
order by 2

131voto

OMG Ponies Points 144785

Utilisation :

  SELECT t.ctn_no
    FROM YOUR_TABLE t
GROUP BY t.ctn_no
  HAVING COUNT(t.ctn_no) > 1

...vous montrera le ctn_no valeur(s) qui ont des doublons dans votre tableau. L'ajout de critères au paramètre WHERE vous permettra d'affiner le choix des doublons :

  SELECT t.ctn_no
    FROM YOUR_TABLE t
   WHERE t.s_ind = 'Y'
GROUP BY t.ctn_no
  HAVING COUNT(t.ctn_no) > 1

Si vous voulez voir les autres valeurs de colonne associées au doublon, vous devez utiliser une jointure automatique :

SELECT x.*
  FROM YOUR_TABLE x
  JOIN (SELECT t.ctn_no
          FROM YOUR_TABLE t
      GROUP BY t.ctn_no
        HAVING COUNT(t.ctn_no) > 1) y ON y.ctn_no = x.ctn_no

3voto

Chandu Points 40028

Essayez cette requête Elle utilise la fonction analytique SUM :

SELECT * FROM
(  
 SELECT SUM(1) OVER(PARTITION BY ctn_no) cnt, A.*
 FROM table1 a 
 WHERE s_ind ='Y'   
)
WHERE cnt > 2

Je ne comprends pas pourquoi vous identifiez un enregistrement comme un doublon si le numéro de compte se répète plus de deux fois. Pour moi, s'il se répète plus d'une fois, c'est un doublon. Dans ce cas, changez la dernière partie de la requête en WHERE cnt > 1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X