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

SQL Oracle Discussion :

Requête OUTER JOIN


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut Requête OUTER JOIN
    Bonjour,

    J'ai une table SQl contenant des tests, à chaque test est associé une sévérité, je cherche à récupérer le nombre de tests par sévérité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT EXTRACT(YEAR FROM BG_DETECTION_DATE) ANNEE, EXTRACT(MONTH FROM BG_DETECTION_DATE) MOIS, BG_SEVERITY SEVERITE, BG_USER_TEMPLATE_05 TYP, COUNT(*) EFF
    FROM BUG
    WHERE EXTRACT(YEAR FROM BG_DETECTION_DATE) =2013
    AND EXTRACT(MONTH FROM BG_DETECTION_DATE) =3
    GROUP BY EXTRACT(YEAR FROM BG_DETECTION_DATE), EXTRACT(MONTH FROM BG_DETECTION_DATE), BG_SEVERITY, BG_USER_TEMPLATE_05
    ORDER BY EXTRACT(YEAR FROM BG_DETECTION_DATE), EXTRACT(MONTH FROM BG_DETECTION_DATE), BG_SEVERITY, BG_USER_TEMPLATE_05
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ANNEE  MOIS  SEVERITE  TYP         EFF
    2013    3        Bloquante evolution  1
    2013    3        Majeure    evolution  1
    Cette requête me donne ce qu'il faut pour le mois de mars 2013, mais SEVERITE prend 3 valeurs Bloquante, Majeure, Mineure, et donc je voudrais comme résultat un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ANNEE  MOIS  SEVERITE  TYP         EFF
    2013    3        Bloquante evolution  1
    2013    3        Majeure    evolution  1
    2013    3        Mineure    evolution
    Mais si je fait une requête avec un OUTER JOIN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT EXTRACT(YEAR FROM BG_DETECTION_DATE) ANNEE, EXTRACT(MONTH FROM BG_DETECTION_DATE) MOIS, BG_SEVERITY SEVERITE, BG_USER_TEMPLATE_05 TYP, COUNT(*) EFF
    FROM BUG
    RIGHT OUTER JOIN (SELECT DISTINCT BG_SEVERITY AS L_SEVERITE FROM BUG) SS ON BUG.BG_SEVERITY=L_SEVERITE
    WHERE EXTRACT(YEAR FROM BG_DETECTION_DATE) =2013
    AND EXTRACT(MONTH FROM BG_DETECTION_DATE) =3
    GROUP BY EXTRACT(YEAR FROM BG_DETECTION_DATE), EXTRACT(MONTH FROM BG_DETECTION_DATE), BG_SEVERITY, BG_USER_TEMPLATE_05
    ORDER BY EXTRACT(YEAR FROM BG_DETECTION_DATE), EXTRACT(MONTH FROM BG_DETECTION_DATE), BG_SEVERITY, BG_USER_TEMPLATE_05
    J'ai le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ANNEE  MOIS  SEVERITE  TYP         EFF
    2013    3        Bloquante evolution  1
    2013    3        Majeure    evolution  1
    Comment faire la jointure proprement?

    Merci,
    Nico

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Lorsqu'il n'y aura pas de correspondance dans la table BUG pour une année, un mois et un statut donnés, du fait de la jointure externe, les colonnes de la table BUG seront à NULL, et donc aucune des clauses WHERE ne sera vérifiée.

    Il faudrait donc déplacer vos conditions du WHERE vers la condition de jointure.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    Si je vire carrément les clauses WHERE, j'ai bien la liste par Année/Mois, mais pour chaque Année/Mois, je n'ai pas forcément les trois valeurs de Sévérité (Bloquante, Majeure, Mineure) -> ne met pas les lignes NULL

    Nico

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    votre problème vient du fait que toutes vos données sont dans une seule table.

    Pour avoir le résultat que vous souhaitez il faut une table / vue des année, mois, severite.

    Ensuite, vous pourrez joindre avec une jointure externe cette table / vue sur votre table des bugs.

  5. #5
    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
    Citation Envoyé par punkoff Voir le message
    Pour avoir le résultat que vous souhaitez il faut une table / vue des année, mois, severite.
    Un calendrier sera suffisant combiné avec une jointure externe partitionée.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/12/2012, 18h38
  2. Aide sur une requête LINQ avec left outer join
    Par jbrasselet dans le forum Linq
    Réponses: 5
    Dernier message: 12/09/2011, 09h31
  3. [AC-2007] Lenteur d'exécution requête outer join
    Par j.lebowski dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/07/2010, 11h55
  4. Requête SQL LEFT OUTER JOIN
    Par dam28800 dans le forum Langage SQL
    Réponses: 42
    Dernier message: 27/02/2009, 14h41
  5. [DML]Fusion de deux requêtes full Outer join colonne null
    Par peuplier dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2009, 15h22

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