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

Discussion :

Comment exclure les doublons d'une table ?

  1. #1
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 028
    Points : 1 801
    Points
    1 801
    Par défaut Comment exclure les doublons d'une table ?
    Bonjour,

    Dans ma table PRODUIT, j'ai comme champs :
    - code produit
    - un descriptif

    Et dans cette table, je stocke également des données avec une granulité plus importante :
    - un sous code produit
    - un sous descriptif

    Donc dans ma table, pour un produit spécifique, le descriptif de mon produit apparait en doublon, triplon (autant de ligne que de sous produit rattaché au produit 'TCGPA' ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select DESCRIPTIF from PRODUIT where CODE_PRODUIT = 'TCGPA'
    Pour éviter ces doublons, en SQL, il suffit de faire une sous requête avec un distinct dans la clause FROM comme ici :

    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
     
    SELECT
      DELEGATION.REGION,
      ANNEE_REFERENCE2.ANNEE_REFERENCE,
      FACTURATION_CLIENT.MONTANT,
      FACTURATION_CLIENT.ANNEE,
      FACTURATION_CLIENT.NIVEAU,
      PRODUIT.DESCRIPTION_PRODUIT
    FROM
      DELEGATION,
      ANNEE_REFERENCE  ANNEE_REFERENCE2,
      FACTURATION_CLIENT,
      (select distinct DESCRIPTION_PRODUIT, PRODUIT, TYPE_FORMATION from PRODUIT) PRODUIT
    WHERE
      ( FACTURATION_CLIENT.PRODUIT=PRODUIT.PRODUIT(+)  )
      AND  ( DELEGATION.CODE_DELEGATION(+)=FACTURATION_CLIENT.DELEGATION  )
      AND  ( FACTURATION_CLIENT.ANNEE=ANNEE_REFERENCE2.ANNEE  )
    Sous Webi, il est possible de modifier manuellement la requête "Utiliser une requêt personnalisée". J'ai donc optée pour cette solution, cependant, je ne trouve pas cette solution très propre.

    Existe t-il une solution mieux ?

    J'espère avoir été sufisamment claire dans mes explications.
    Je vous remercie par avance

  2. #2
    Membre expérimenté Avatar de djam21
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2006
    Messages
    843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2006
    Messages : 843
    Points : 1 307
    Points
    1 307
    Par défaut
    Ton objectif est de faire une requête comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DESCRIPTIF FROM PRODUIT WHERE CODE_PRODUIT = 'TCGPA'
    ???

    Dans Webi, si tu fais une requete ou tu ne ramènes que DESCRIPTIF, il appliquera un DISTINCT, donc ton souçi est réglé...

  3. #3
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 028
    Points : 1 801
    Points
    1 801
    Par défaut
    Nop du tout.
    Mon objectif est de réaliser un tableau de bord avec :
    - le descriptif de mes produits
    - mais aussi la région de ma délégation
    - le montant
    - l'année

    Les données que j'aimerais resortire corresponde au donnée de la grande requête de mon 1er post.

    Pour le moment, comme solution dans Webi,
    Dans le mode "Modifier la requête", je fais drag and drop des objets BO que je souhaite faire apparaitre
    BO, a généré pour cela une reqête automatiquement avec les jointures qui vont bien entre les objets.

    Je clique alors sur le bouton "SQL" et je modifie la reqête BO généré en remplaçant dans la clause FROM :
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT DISTINCT DESCRIPTION_PRODUIT, PRODUIT, TYPE_FORMATION FROM PRODUIT) PRODUIT
    Le problème est que je ne peux pas faire de distinct global parce que je fais un agregat sur le montant. Je calcul le montant par produit

  4. #4
    Membre expérimenté Avatar de djam21
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2006
    Messages
    843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2006
    Messages : 843
    Points : 1 307
    Points
    1 307
    Par défaut
    Pour laisser le dynamisme en place, pourquoi ne fais tu pas plusieurs requetes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Requete 1 = Produit + Montant
     
    Requete 2 = Produit + Descriptif + ...
    Pour ton tableau, tu lies tes produits et tu pourras utiliser les élements provenant de tes deux requetes...

  5. #5
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 028
    Points : 1 801
    Points
    1 801
    Par défaut
    Tout d'abord djam21, je tiens à te remercier de t'etre interessé à mes soucis ...

    Donc dans mon cas, en reprenant la requête entière :
    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
    SELECT
      DELEGATION.REGION,
      ANNEE_REFERENCE2.ANNEE_REFERENCE,
      FACTURATION_CLIENT.MONTANT,
      FACTURATION_CLIENT.ANNEE,
      FACTURATION_CLIENT.NIVEAU,
      PRODUIT.DESCRIPTION_PRODUIT
    FROM
      DELEGATION,
      ANNEE_REFERENCE  ANNEE_REFERENCE2,
      FACTURATION_CLIENT,
      (SELECT DISTINCT DESCRIPTION_PRODUIT, PRODUIT, TYPE_FORMATION FROM PRODUIT) PRODUIT
    WHERE
      ( FACTURATION_CLIENT.PRODUIT=PRODUIT.PRODUIT(+)  )
      AND  ( DELEGATION.CODE_DELEGATION(+)=FACTURATION_CLIENT.DELEGATION  )
      AND  ( FACTURATION_CLIENT.ANNEE=ANNEE_REFERENCE2.ANNEE  )
    La requete serait découpé en 2 requêtes "Webi" :

    Requete 1 (en reprenant la sous requete) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DESCRIPTION_PRODUIT, PRODUIT, TYPE_FORMATION FROM PRODUIT

    Requete 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
      DELEGATION.REGION,
      ANNEE_REFERENCE2.ANNEE_REFERENCE,
      FACTURATION_CLIENT.MONTANT,
      FACTURATION_CLIENT.ANNEE,
      FACTURATION_CLIENT.NIVEAU,
    FROM
      DELEGATION,
      ANNEE_REFERENCE  ANNEE_REFERENCE2,
      FACTURATION_CLIENT,
    WHERE
      AND  ( DELEGATION.CODE_DELEGATION(+)=FACTURATION_CLIENT.DELEGATION  )
      AND  ( FACTURATION_CLIENT.ANNEE=ANNEE_REFERENCE2.ANNEE  )

    Dans la requête 2, j'ai donc supprimé :
    - dans la clause FROM : la référence à la table Produit
    - dans la clause SELECT : le champs produit
    - dans la clause WHERE : la jointure de la table Produit

    Ma question est :
    Comment faire la jointure de ces 2 requêtes ?

    Lorsque je souhaite affiché mon tableau de bord, je ne filtre pas produit comme tu peux le voire sur la capture
    Images attachées Images attachées  

  6. #6
    Membre expérimenté Avatar de djam21
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2006
    Messages
    843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2006
    Messages : 843
    Points : 1 307
    Points
    1 307
    Par défaut
    Si je simplifie un peu, en faisant une requete comme çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT produit, avg(montant)
    FROM FACTURATION_CLIENT, PRODUIT
    WHERE FACTURATION_CLIENT.produit = PRODUIT.produit
    tu n'obtiens pas les résultats escompté avec çà ?

    Si oui, c'est une piste... tu peux très bien travailler sur la méthode d'agrégation pour arriver à tes fins. Soit au niveau de l'univers, soit au niveau de l'état (en ramenant tes lignes démultipliées puis en divisant par le nombre de lignes récupérées par produit)...

  7. #7
    Membre expérimenté Avatar de djam21
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2006
    Messages
    843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2006
    Messages : 843
    Points : 1 307
    Points
    1 307
    Par défaut
    J'y pense : j'imagine que tu as déjà essayé en cochant/décochant la case "extraire les doublons" dans les propriétés de ta requête ?

  8. #8
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 028
    Points : 1 801
    Points
    1 801
    Par défaut
    Citation Envoyé par djam21 Voir le message
    Si je simplifie un peu, en faisant une requete comme çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT produit, avg(montant)
    FROM FACTURATION_CLIENT, PRODUIT
    WHERE FACTURATION_CLIENT.produit = PRODUIT.produit
    tu n'obtiens pas les résultats escompté avec çà ?
    Nop.
    J'ai en effet besoin des autres champs de clause SELECT

    ANNEE_REFERENCE2.ANNEE_REFERENCE => N, N-1, N-2
    et surtout j'ai besoin de connaitre la région affecté (Métropole, DOM TOM, ...)


    Citation Envoyé par djam21 Voir le message
    Si oui, c'est une piste... tu peux très bien travailler sur la méthode d'agrégation pour arriver à tes fins. Soit au niveau de l'univers, soit au niveau de l'état (en ramenant tes lignes démultipliées puis en divisant par le nombre de lignes récupérées par produit)...
    Au niveau de l'univers, le problème est que cela impacterais sur d'autres tableau de bord qui n'ont pas de doublon car j'exploite le produit et sous produit.

    Au niveau de l'état
    Qu'entends tu par état ? dans Webi ?

  9. #9
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 028
    Points : 1 801
    Points
    1 801
    Par défaut
    Citation Envoyé par djam21 Voir le message
    J'y pense : j'imagine que tu as déjà essayé en cochant/décochant la case "extraire les doublons" dans les propriétés de ta requête ?
    Comme c'est BO qui s'occupe de faire l'agrégat sur le champ FACTURATION_CLIENT.MONTANT, cela peut débloquer la situation.

    Je teste. Je te tiens au courant.

  10. #10
    Membre expérimenté Avatar de djam21
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2006
    Messages
    843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2006
    Messages : 843
    Points : 1 307
    Points
    1 307
    Par défaut
    Au niveau de l'univers, pour les besoins de ton état, tu peux dupliquer ton objet que tu configureras en fonction de tes besoins. Puis tu le masques...

    Au niveau de l'état : oui dans Webi. vu que ta requete ramène plusieurs lignes identiques, tu as la possibilité (si "extraire les doublons" ne marche pas) de compter le nombre de lignes identiques. A partir de là ta colonne indicateur sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =somme(indicateur) / nombredelignes

  11. #11
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 028
    Points : 1 801
    Points
    1 801
    Par défaut
    Pour le moment, je dois t'avouer que je modifie ma requête directement dans Wibi parce que je voulais avancer dans mon projet. Malheureusement, ce n'est pas très pratique et c'est pourquoi je reviens demander de l'aide sur ce point.

    Citation Envoyé par djam21 Voir le message
    Au niveau de l'univers, pour les besoins de ton état, tu peux dupliquer ton objet que tu configureras en fonction de tes besoins. Puis tu le masques...
    Résoudre le problème au niveau de l'univers me tente. Cela me permettrait ainsi de l'appliquer sur tous mes rapports de manière transparente.

    Dupliquer mon objet ?
    Tu veux dire me créer un alias de mon OBJET_PRODUIT ?
    C'est chose faite. Je me suis créé un alias nommé GAP_PRODUIT_FACTURATION mais je reste bloqué pour faire la jointure entre GAP_PRODUIT et GAP_PRODUIT_FACTURATION. Je vais toujours avoir mes doublons

    J'ai dans ma table GAP_PRODUIT en doublon, voir triplons parce qu'un produit peut correspondre à un type de formation, et sous type de formation (cf 2ème capture)

    Or dans mon tableau de bord, je ne vais exploiter l'information qu'au niveau du produit (son descriptif)

    Comment donc faire la jointure dans Designer (cf 1ère capture)
    Images attachées Images attachées   

Discussions similaires

  1. Comment supprimer les doublons d'une table?!
    Par JauB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/01/2006, 08h48
  2. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12
  3. Comment compter les doublons d'une colonne?
    Par Dnx dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/11/2005, 10h50
  4. comment modifier les données d'une table à travers un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 12
    Dernier message: 19/07/2005, 09h51
  5. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18

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