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

Oracle Discussion :

problème de doublon sur les requêtes


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut problème de doublon sur les requêtes
    bonjour ,
    j'ai crée une requête qui m'affiche des doublons sur le champ ( A.txt_quotefield ) aléatoirement. Comment faire un sous-select pour n'avoir q'une seule ligne.

    Merci de bien vouloir m'apporter une aide sur ce petit problème.

    sincères salutations.

    Ci-joint ci-dessous la requête ainsi qu'un extrait des données sur Excel.


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Select A.cd_box2, A.cd_box, A.txt_quotefield, A.dt_ws_begin, A.tm_fcast_tech_time, A.tm_maint_stop
    From WS A, WO B, WS_PROCESS C, CM_TRIGGER D
     Where B.cd_wo = A.cd_wo
     And A.cd_wo = C.cd_wo
     And A.cd_ws = C.cd_ws
    And B.cd_pwo = D.cd_pwo 
    And (
     (A.cd_wo>0)
    	and (A.cd_ws>0)
    	and (A.dttm_validate between to_date(‘01/11/06’,’DD/MM/YY’) and to_date(31/12/06’)
           )
    and (A.txt_quotefield not like ‘%Pièces%’)
    and ( A.cd_company = ‘CLUS’)
    and (A.cd_wows_status =’6)
    and (C.txt_quotefield is not null
            and C.txt_quotefield not like ‘%Lien doc externe%’)
    and (D.val_nextday between 91 and 1825)
    )
    order by 1, 2
     
     
    Le résultat affiché
     
    CD_BOX2	CD_BOX	TXT_QUOTEFIELD
    CAGE	A038	A03802S
    CAGE	A038	A03802S
    CAGE	A038	A03802S
    CAGE	A038	A03802S
    CAGE	A145	A14501S
    CAGE	A208	A20808A
    CAGE	A208	A20811S
    CAGE	B036	B03602S  PSQ1
    CAGE	B036	B03602S  PSQ1

  2. #2
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Bonjour,


    eu..pourquoi tu n'ajoutes pas DISTINCT après on select ca enlève les doublon!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT DISTINCT champs
    FROM tatable
    @+
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut toujours des doublons
    Citation Envoyé par trinityDev
    Bonjour,


    eu..pourquoi tu n'ajoutes pas DISTINCT après on select ca enlève les doublon!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT DISTINCT champs
    FROM tatable
    @+

    bonjour , j'ai fait une sous requête en ajoutant DISTINCT sur le A.cd_wo qui est le N° du BT et cela me donnes les mêmes résultats. (toujours des doublons).
    Si je place le A.cd_wo en tête du select principal , à ce moment là, je n'ai plus de doublons. Mais l'ordre d'affichage de mes colonnes ne correspond plus
    à ce que je souhaites.

    Merci de bien vouloir m'aider à corriger la requête parce que je sèches ....

    Slts.

    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
    21
    22
    23
    24
     
    Select A.cd_box2, A.cd_box, A.txt_quotefield, A.cd_wo, A.cd_ws, A.dt_ws_begin, A.tm_fcast_tech_time
    From WS A, WO B, WS_PROCESS C, CM_TRIGGER D
     Where B.cd_wo = A.cd_wo
     And A.cd_wo = C.cd_wo
     And A.cd_ws = C.cd_ws
    And B.cd_pwo = D.cd_pwo 
    And (
    	(A.cd_wo) in (select distinct (cd_wo)
    				from WS 
    where cd_wo = cd_wo)
    and (A.cd_wo>0)
    	and (A.cd_ws>0)
    	and (A.dttm_validate between to_date(‘01/11/06’,’DD/MM/YY’) and to_date(31/12/06’)
           )
    and (A.txt_quotefield not like ‘%Pièces%’)
    and (A.cd_company = ‘CLUS’)
    and (A.cd_wows_status =’6)
    and (C.txt_quotefield is not null
            and C.txt_quotefield not like ‘%Lien doc externe%’)
    and (D.val_nextday between 91 and 1825)
     
    )
    order by 1, 2

  4. #4
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Et ça ?
    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
    SELECT DISTINCT A.cd_box2, A.cd_box, A.txt_quotefield, A.dt_ws_begin, A.tm_fcast_tech_time, A.tm_maint_stop
    FROM WS A, WO B, WS_PROCESS C, CM_TRIGGER D
     WHERE B.cd_wo = A.cd_wo
     AND A.cd_wo = C.cd_wo
     AND A.cd_ws = C.cd_ws
    AND B.cd_pwo = D.cd_pwo 
    AND (
     (A.cd_wo>0)
    	AND (A.cd_ws>0)
    	AND (A.dttm_validate BETWEEN to_date(‘01/11/06’,’DD/MM/YY’) AND to_date(31/12/06’)
           )
    AND (A.txt_quotefield NOT LIKE ‘%Pièces%’)
    AND ( A.cd_company = ‘CLUS’)
    AND (A.cd_wows_status =’6)
    AND (C.txt_quotefield IS NOT NULL
            AND C.txt_quotefield NOT LIKE ‘%Lien doc externe%’)
    AND (D.val_nextday BETWEEN 91 AND 1825)
    )
    ORDER BY 1, 2
    Si tu as encore des doublons merci de nous donner un exemple de ces doublons.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut plus de doublons , mais autre problème
    Re,
    après exécution de la requête , je n'ai plus de de doublons puisque le distinct a été fait sur le cd_box2
    voici le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CD_BOX2	CD_BOX	TXT_QUOTEFIELD
    CAGE	A036	A03603S  PSQ1
    mais ,
    dans le champ cd_box2, il n'y a qu'une seule donnée
    dans le champ cd_box, il n'y a qu'une seule donnée
    dans le champ txt_quotefield, on peut avoir plusieurs données différentes et c'est là ou j'ai les doublons.
    Voici ce que je souhaite avoir comme données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CD_BOX2  CD_BOX	TXT_QUOTEFIELD
    CAGE	  A036	A03603S  PSQ1
    CAGE	   A036	A03602S
    Slts ,

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Le distinct, ce n'est vraiment pas la solution pure....

    Etant donné que tu n'affiche que des données de ta table A, les autres tables ne servent que de filtrage, il faut donc préférer utilsiser les instructions de filtrage plustot que les jointure qui elles, sont faite pour rappatrier des données de plusieurs tables sur des memes lignes. Il faut donc préférer le EXISTS aux jointures classiques:

    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
    21
    22
    23
    SELECT A.cd_box2, A.cd_box, A.txt_quotefield, A.dt_ws_begin, A.tm_fcast_tech_time, A.tm_maint_stop 
    FROM WS A 
    WHERE EXISTS (
    SELECT 1 from 
    WO B, WS_PROCESS C, CM_TRIGGER D
     WHERE B.cd_wo = A.cd_wo
     AND A.cd_wo = C.cd_wo
     AND A.cd_ws = C.cd_ws
    AND B.cd_pwo = D.cd_pwo 
    AND (
     (A.cd_wo>0)
    	AND (A.cd_ws>0)
    	AND (A.dttm_validate BETWEEN to_date(‘01/11/06’,’DD/MM/YY’) AND to_date(31/12/06’)
           )
    AND (A.txt_quotefield NOT LIKE ‘%Pièces%’)
    AND ( A.cd_company = ‘CLUS’)
    AND (A.cd_wows_status =’6)
    AND (C.txt_quotefield IS NOT NULL
            AND C.txt_quotefield NOT LIKE ‘%Lien doc externe%’)
    AND (D.val_nextday BETWEEN 91 AND 1825)
     )
    )
    ORDER BY 1, 2

    On peut etre un peu plus fin en rapatriant au niveau plus au tout ce qui ne concerne que la table A:

    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
    21
    22
    23
    24
    SELECT A.cd_box2, A.cd_box, A.txt_quotefield, A.dt_ws_begin, A.tm_fcast_tech_time, A.tm_maint_stop 
    FROM WS A 
    WHERE 
     (
     (A.cd_wo>0)
    	AND (A.cd_ws>0)
    	AND (A.dttm_validate BETWEEN to_date(‘01/11/06’,’DD/MM/YY’) AND to_date(31/12/06’)
           )
    AND (A.txt_quotefield NOT LIKE ‘%Pièces%’)
    AND ( A.cd_company = ‘CLUS’)
    AND (A.cd_wows_status =’6)
    AND EXISTS (
    SELECT 1 from 
    WO B, WS_PROCESS C, CM_TRIGGER D
     WHERE B.cd_wo = A.cd_wo
     AND A.cd_wo = C.cd_wo
     AND A.cd_ws = C.cd_ws
    AND B.cd_pwo = D.cd_pwo 
    AND (C.txt_quotefield IS NOT NULL
            AND C.txt_quotefield NOT LIKE ‘%Lien doc externe%’)
    AND (D.val_nextday BETWEEN 91 AND 1825)
     )
    )
    ORDER BY 1, 2

    Il me semble que c'est beaucoup dans l'esprit de ce que tu veux faire....

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    La requête fonctionne à merveille . Merci pour les explications. ça m'a permis d'évoluer dans le Sql.

    Merci beaucoup. Cordialement
    A+

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

Discussions similaires

  1. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55
  2. Renseignements sur les requêtes
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 07/02/2006, 20h09
  3. Calcul de Statistics sur les requêtes
    Par Rahustro dans le forum Oracle
    Réponses: 3
    Dernier message: 17/01/2006, 06h19
  4. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

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