Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
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 20/10/2011, 14h50   #1
Nouveau Membre du Club
 
Inscription : septembre 2004
Messages : 90
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 90
Points : 27
Points : 27
Par défaut Relation père fils : Requête récursive

Bonjour,

J'ai un besoin concernant une requête qui doit m'extraire tous les collaborateurs gérés par un manager, sachant que ce manager gère lui même des managers qui gèrent des collaborateurs. Il s'agit d'une arborescence pere-fils dans laquelle il peut y avoir beaucoup de niveau sans que j'en connaisse le nombre.

Exemple de table d'origine avec la relation collaborateur manager.
Manager Coll
0 1
0 2
0 3
1 4
2 5
2 6

Je souhaiterai obtenir le résultat suivant :
Manager Coll
0 1
0 2
0 3
0 4
0 5
0 6
1 4
2 5
2 6

Je pensais pouvoir utiliser les CTE (Common Table Expression) mais à priori cela fonctionne plutôt à partir de la base et non du haut de l'arbre.
Peut être qu'une requête récursive en partant du haut de l'arbre me permettrait de construire mon résultat mais je ne vois pas bien comment.
Merci par avance pour les réponses ou pistes que vous pourrez m'apporter.
PS : Je ne peux pas passer par du code et il faut que j'arrive à le faire via une seule requête SQL.
REMACC1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h40   #2
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 159
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 159
Points : 1 611
Points : 1 611
Sur google, avec une recherche sur les termes:
msdn cte

J'obtiens comme premier lien celui-ci:
http://msdn.microsoft.com/en-us/library/ms186243.aspx

Qui reprend en exemple:
Citation:
The following example shows the semantics of the recursive CTE structure by returning a hierarchical list of employees, starting with the highest ranking employee
Est ce que ca repond a votre probleme ?
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h42   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Code :
1
2
3
4
5
6
7
8
CREATE TABLE T (Manager INT, Coll INT)
 
INSERT INTO T VALUES (0, 1)
INSERT INTO T VALUES (0, 2)
INSERT INTO T VALUES (0, 3)
INSERT INTO T VALUES (1, 4)
INSERT INTO T VALUES (2, 5)
INSERT INTO T VALUES (2, 6)
La solution

Code :
1
2
3
4
5
6
7
8
9
10
11
12
WITH TR
AS
(SELECT Manager, Coll
 FROM   T
 UNION  ALL
 SELECT T0.Manager, T1.Coll
 FROM   TR AS T0
        INNER JOIN T AS T1
              ON T0.Coll = T1.Manager)
SELECT *
FROM   TR    
ORDER BY 1, 2
Lisez mon cours sur le sujet : http://sqlpro.developpez.com/cours/s...te-recursives/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est actuellement 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 16h33.


 
 
 
 
Partenaires

Hébergement Web