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 :

Rapatrier des doublons


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut Rapatrier des doublons
    Bonjour,

    J'aimerais pouvoir isoler les doublons dans une table, mais aussi la première occurrence de ces doublons en fonctions d'une clé.

    Pour mieux expliquer :


    Table d'entrée : TBL1

    NUMFYR IDFDOS

    aa 123
    aa 345
    aa 567
    bb 246
    cc 369


    Format de la table voulue en sortie :

    NUMFYR IDFDOS

    aa 123
    aa 345
    aa 567


    J'ai essayé avec des jointures réflexives ou des requêtes imbriquées,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Proc sql;
    create table tbl2 as
    select *
    from tbl1 t1,
    (select * 
    from tbl1
    group by numfyr
    having count(*)>1) t2
    where t1.numfyr=t2.numfyr;
    quit;

    mais au mieux, j'ai ceci :

    NUMFYR IDFDOS

    aa 123
    aa 123
    aa 123
    aa 345
    aa 345
    aa 345
    aa 567
    aa 567
    aa 567


    Quelqu'un voit comment s'en sortir ?

    A savoir que ma table réelle, fait environ 3M de lignes, et qu'un produit cartésien serait fâcheux^^

    Merci d'avance.

  2. #2
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Bonjour,

    Citation Envoyé par ueshiba Voir le message
    Table d'entrée : TBL1

    NUMFYR IDFDOS

    aa 123
    aa 345
    aa 567
    bb 246
    cc 369
    Je ne voit pas de "doublons" dans cette table.
    Qu'est-ce que vous appelez des doublons ?
    Citation Envoyé par ueshiba Voir le message
    Format de la table voulue en sortie :

    NUMFYR IDFDOS

    aa 123
    aa 345
    aa 567
    Je ne voit pas non plus comment vous passez des données fournis plus haut à ce résultat, (si ce n'est un WHERE NUMFYR = 'aa').

    Essayez de donner plus d'explications/détails.
    Et quel est votre SGBD ?

    Edit: Ok, vous cherchez simplement toutes les lignes pour lesquelles la valeur de NUMFYR est présente plus d'une fois dans la table ?

  3. #3
    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
    Dans votre sous-requête, remplacez l'étoile par numfyr.
    Ça m'étonne que la syntaxe fonctionne, ça sent le MySQL !

  4. #4
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Sous MySQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    create table tbl1 (
    numfyr char(2),
    idfos integer
    );
    insert into tbl1 values
    ('aa', 123),
    ('aa', 345),
    ('aa', 567),
    ('bb', 246),
    ('cc', 369);
     
    SELECT *
    FROM (
      SELECT numfyr
      FROM tbl1
      GROUP BY numfyr
      HAVING Count(*)>1
    ) AS td
      NATURAL JOIN tbl1
    Donne le bon résultat:
    aa 123
    aa 345
    aa 567
    Je ne serais par contre pas l'écrire pour un autre SGBD

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Le doublons se situe sur le champ numfyr.

    Pour mieux expliquer :

    mes clients sont identifiés avec un numéro global : NUMFYR
    Chaque client peut avoir plusieurs dossiers secondaires : IDFDOS sous un même NUMFYR

    d'où le :

    NUMFYR IDFDOS

    aa 123
    aa 345
    aa 567
    bb 246
    cc 369

    Le numéro de numfyr aa (dans ma table numérique de 9) à 3 idfdos différents (123/345/567, identifié dans ma table avec un numérique de 9 également).

    J'ai besoin de ressortir uniquement les clients ayant plusieurs dossiers sous le même NUMFYR.

    Un simple dédoublonnage, par exemple :

    proc sort data=tbl1 nodupkey out=sasuser.tbl1_nodoub
    dupout=sasuser.tbl1_doub;
    by numfyr;
    run;

    ne me sortira que les champs :

    numfyr idfdos
    aa 345
    aa 123

    d'où mon soucis.


    Sinon la syntaxe sql fonctionne normalement et je ne suis pas sous mysql (je suis en oracle)

    Merci d'avance

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Edit :

    Merci à Waldar, le remplacement de * par numfyr me donne le résultat voulu. Soit donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Proc sql;
    CREATE TABLE tbl2 AS
    SELECT *
    FROM tbl1 t1,
    (SELECT NUMFYR 
    FROM tbl1
    GROUP BY numfyr
    HAVING count(*)>1) t2
    WHERE t1.numfyr=t2.numfyr;
    quit;
    Je ne devais pas mettre une * dans la requête imbriquée.

    Merci beaucoup à vous !!

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

Discussions similaires

  1. [DTS] Import de données avec des doublons
    Par Hotchotte dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/03/2005, 14h19
  2. Eliminer des Doublon dans une Table
    Par Soulama dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/02/2005, 14h27
  3. 1 Table, Des doublons, ne rertenir que certains d'entre eux
    Par Dragano dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/01/2005, 12h06
  4. Effacer des doublons
    Par ben53 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/07/2004, 17h56
  5. Réponses: 2
    Dernier message: 07/07/2004, 17h44

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