Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/08/2011, 15h40   #1
Invité de passage
 
Inscription : août 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 4
Points : 0
Points : 0
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 :
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.
Gex936 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 15h45   #2
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

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

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

as tu pensé a connect by ?
__________________
Publications: http://schelabi.developpez.com/
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 16h09   #3
Invité de passage
 
Inscription : août 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 4
Points : 0
Points : 0
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
Gex936 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 16h15   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 810
Points : 5 810
Telle que vous l’avez énoncé votre problème, vous n’avez pas forcement besoin d’une requête hiérarchique:
Code :
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>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 16h24   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Par contre le numéro de sécu n'est pas une bonne clé à cause des doublons possibles
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 17h36   #6
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

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

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Code :
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.
__________________
Publications: http://schelabi.developpez.com/
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 18h16   #7
Invité de passage
 
Inscription : août 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 4
Points : 0
Points : 0
C'est vraiment gentil de votre part de répondre aussi rapidement

Merci à mnitu et salim11 pour vos réponses !
Gex936 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h03.


 
 
 
 
Partenaires

Hébergement Web