IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Trouver les doublons


Sujet :

Langage SQL

  1. #1
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut Trouver les doublons
    Bonjour,

    je suis sous SQL SERVER

    J'ai une table contenant deux champs : ID / CODE
    Les ID sont uniques, mais les codes peuvent apparaître plusieurs fois.
    Je cherche à récupérer tous les ID dont le code existe plusieurs fois

    Par exemple, j'ai à la base

    ID CODE
    1 A
    2 B
    3 A
    4 C
    5 B
    6 D
    7 E


    Et je cherche à obtenir ceci :

    ID CODE
    1 A
    3 A
    2 B
    5 B

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Tu as plusieurs façons de le faire, avec une jointure, un EXISTS...
    Exemples:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select t1.*
    from LaTable as t1
    where exists (select 1 from LaTable as t2 on t1.id <> t2.id and t1.Code = t2.Code)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select distinct t1.*
    from LaTable as t1
    inner join LaTable as t2 on t1.id <> t2.id and t1.Code = t2.Code

    Tatayo.

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    merci pour la réponse rapide.

    J'étais pas loin avec le EXISTS, merci de m'avoir donné la solution complète

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Une autre solution sans jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with cte_cnt (id, code, cnt) as
    (
    select id, code
         , count(*) over(partition by code)
      from LaTable
    )
    select id, code
      from cte_cnt
     where cnt > 1;
    Testé ici : https://dbfiddle.uk/aDkEgYq1

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Une autre solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select all id, code
    from ta_table
    where code in (
        select all code
        from ta_table
        group by code
        having count(distinct id) > 1
    );
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    On peut également utiliser STRING_AGG pour avoir une seule ligne par valeur à dédoublonner

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select CODE
         , count(*) as "Nbre"
         , string_agg(ID, ', ') 
           within group (order by ID) 
                    as "Liste ID"
    from   LaTable
    group by CODE
    having count(*) > 1
    order by CODE

    Résultat :

    Nom : Sans titre.png
Affichages : 44
Taille : 1,5 Ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Formule Personalisee pour trouver les doublons
    Par Bonero dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/02/2012, 21h27
  2. [MySQL] Trouver les doublons
    Par heretik25 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 23/09/2011, 20h13
  3. [XL-2003] trouver les doublons
    Par guigui71 dans le forum Excel
    Réponses: 7
    Dernier message: 11/01/2011, 14h47
  4. [sqlserver] trouver les doublons
    Par graphicsxp dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/11/2007, 12h06
  5. Trouver les doublons
    Par wanou44 dans le forum ASP
    Réponses: 20
    Dernier message: 28/04/2006, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo