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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    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 émérite 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 : 37
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    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
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    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 émérite 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 : 37
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    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 confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    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 confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    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