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 " chef d'un chef " en une seule fois


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Requête " chef d'un chef " en une seule fois
    Bonjour,

    voilà je me viens mettre ma question sur le forum car j'ai beau rechercher... Je désespère.

    J'ai une table EMPLOYES dans laquelle se trouve :
    NumSecu(CP)
    Nom,
    NumChef ( référence à un numSecu)

    On demande d'afficher le nom d'un employé ainsi que le nom de ses 3 chefs directs. Cette recherche des 3 chefs directs se fait par UNE seule Requete SQL.

    ça doit être une seule requête qui s'adapte aux nombres de chef direct de la personne recherchée sans intervention de PL SQL ..

    Comme exemple j'ai ARTHUR qui n'a qu'un chef, ROBERT qui en a 2 , CESAR qui en a 3 et LAURE qui n'a pas de chef

    ARTHUR chef LAURE
    ROBERT chef ARTHUR chef LAURE
    CESAR chef ROBERT chef ARTHUR chef LAURE
    LAURE ( sans chef)


    Avez vous une idée concernant la requête ? Ceci dois être intégré dans un package PL/SQL avec comme entrée le nom d'un employé et en sortie une table

    J'ai testé ceci qui me donne bien la réponse quand la personne où il y a le plus de patron mais si je change CESAR par un autre. Je n'obtiens plus rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT A.nom, B.nom, C.nom, D.nom 
    FROM employes A, employes B, employes C, employes D 
    WHERE c.numchef = D.numsecu 
    AND c.numchef IN(SELECT numchef 
    FROM employes 
    WHERE b.numchef = C.numsecu 
    AND b.numchef IN(SELECT numchef 
    FROM employes 
    WHERE A.numchef = B.numsecu 
    AND A.numchef IN(SELECT numchef 
    FROM employes 
    WHERE nom ='CESAR ')))
    En vous remerciant.

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    as tu pensé a connect by ?

  3. #3
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Non du tout ^^
    Je viens d'un peu regarder dans des explications , ça pourrait bien résoudre mon problème !

    Un grand merci.
    Je posterai la réponse si je l'a trouve d'ici peu

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Telle que vous l’avez énoncé votre problème, vous n’avez pas forcement besoin d’une requête hiérarchique:
    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
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> With Emp As (
      2    Select 'CESAR' As Nom, Null As Chef From dual Union All
      3    Select 'ROBERT' As Nom, 'CESAR' As Chef From dual Union All
      4    Select 'ARTHUR' As Nom, 'ROBERT' As Chef From dual Union All
      5    Select 'LAURE' As Nom, 'ARTHUR' As Chef From dual
      6  )
      7  Select e1.Nom, e1.Chef, e2.Chef, e3.Chef
      8    From Emp e1
      9         Left Outer Join
     10         Emp e2
     11      On (e1.chef = e2.nom)
     12         Left Outer Join
     13         Emp e3
     14      On (e2.chef = e3.nom)
     15         Left Outer Join
     16         Emp e4
     17      On (e3.chef = e4.nom)
     18  /
     
    NOM    CHEF   CHEF   CHEF
    ------ ------ ------ ------
    LAURE  ARTHUR ROBERT CESAR
    ROBERT CESAR         
    CESAR                
    ARTHUR ROBERT CESAR  
     
    SQL>

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Par contre le numéro de sécu n'est pas une bonne clé à cause des doublons possibles

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    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
     
    /* Formatted on 2011/08/11 11:34 (Formatter Plus v4.8.8) */
    WITH emp AS
         (SELECT 'CESAR' AS nom, NULL AS chef
            FROM DUAL
          UNION ALL
          SELECT 'ROBERT' AS nom, 'CESAR' AS chef
            FROM DUAL
          UNION ALL
          SELECT 'ARTHUR' AS nom, 'ROBERT' AS chef
            FROM DUAL
          UNION ALL
          SELECT 'LAURE' AS nom, 'ARTHUR' AS chef
            FROM DUAL)
    SELECT     MAX (LTRIM (SYS_CONNECT_BY_PATH (nom, ' chef de --> '), 'chef de--> '))KEEP (DENSE_RANK LAST ORDER BY LEVEL)
                                                                              res
          FROM emp
      GROUP BY LEVEL
    START WITH chef IS NULL
    CONNECT BY PRIOR nom = chef
     
    RES                                                                             
    --------------------------------------------------------------------------
    CESAR                                                                           
    CESAR chef de --> ROBERT                                                        
    CESAR chef de --> ROBERT chef de --> ARTHUR                                     
    CESAR chef de --> ROBERT chef de --> ARTHUR chef de --> LAURE                   
     
     
    4 rows selected.

  7. #7
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    C'est vraiment gentil de votre part de répondre aussi rapidement

    Merci à mnitu et salim11 pour vos réponses !

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

Discussions similaires

  1. [AC-2010] Requête: Rassembler les informations de plusieurs lignes en une seule
    Par albayt dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 21/11/2013, 22h05
  2. Réponses: 38
    Dernier message: 02/11/2009, 18h20
  3. Requête SQL: Afficher Gratuit/Payant en une seule fois
    Par Sethenssen dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/11/2009, 20h43
  4. [MySQL] requête select une seule fois
    Par speedylol dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/02/2009, 06h40
  5. [Prototype] Envoie qu'une seule fois d'une requête
    Par akrogames dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 20/05/2008, 11h48

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