Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 18/01/2012, 17h53   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 20
Points : 2
Points : 2
Par défaut Problème de récursivité : relation père fils multiple

Bonjour,

J'ai lu le cours de Frédéric BROUARD http://sqlpro.developpez.com/cours/s...te-recursives/ mais je n'ai pas pu répondre à mon besoin qui est le suivant :

j'ai un table process qui contient : Master_BP, Parent_BP, Current_BP, BP_NAME, BP_START_DATE

on peut avoir plusieurs niveau de relation pere fils, example de données :

Citation:
Parent_BP, Current_BP, BP_NAME
, 1 , Parent1
1 , 11 , BP11
11 , 111 , BP111
, 2 , Parent2
2 , 22 , BP22
22 , 222 , BP222
Résultat à afficher :

Citation:
Parent1
BP11
BP111
Parent2
BP22
BP222
Requete CTE SQL :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
WITH tree (PARENT_BP_UUID,CURRENT_BP_UUID,BP_ID,BP_NAME, Level)
AS
(
-- Anchor member definition
    SELECT PARENT_BP_UUID, CURRENT_BP_UUID, BP_ID, BP_NAME, 0
    FROM PO_TRACKING_BP
    WHERE PARENT_BP_UUID=''
    UNION ALL
-- Recursive member definition
    SELECT v.PARENT_BP_UUID, v.CURRENT_BP_UUID, v.BP_ID, v.BP_NAME, t.Level + 1
    FROM PO_TRACKING_BP AS v
    INNER JOIN tree AS t ON t.CURRENT_BP_UUID = v.PARENT_BP_UUID 
)   
SELECT BP_NAME,PARENT_BP_UUID,CURRENT_BP_UUID,BP_ID, Level
FROM   tree
Resultat obtenu:

Citation:
Parent_BP, Current_BP, BP_NAME
, 1 , Parent1
, 2 , Parent2
1 , 11 , BP11
11 , 111 , BP111
2 , 22 , BP22
22 , 222 , BP222
Souhaité :

Citation:
Parent_BP, Current_BP, BP_NAME
, 1 , Parent1
1 , 11 , BP11
11 , 111 , BP111
, 2 , Parent2
2 , 22 , BP22
22 , 222 , BP222
Pouvez vous svp m'aider à afficher l'arbre de chaque Parent, à la suite : arbre parent1, puis arbre parent2, etc

Merci de votre aide
relbeghdadi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 18h50   #2
Invité de passage
 
Inscription : janvier 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 20
Points : 2
Points : 2
Pas très inspiré ou pas très clair????
relbeghdadi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 08h57   #3
Invité de passage
 
Inscription : août 2004
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 4
Points : 2
Points : 2
Bonjour,

Et avec un order by ?
nicoinca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 12h37   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il faut rajouter l'id de départ dans la CTE et le conserver :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;WITH tree (PARENT_BP_UUID, CURRENT_BP_UUID, BP_ID, BP_NAME, Level, ROOT_ID) AS
(
-- Anchor member definition
SELECT PARENT_BP_UUID, CURRENT_BP_UUID, BP_ID, BP_NAME, 0, CURRENT_BP_UUID
  FROM PO_TRACKING_BP
 WHERE PARENT_BP_UUID = ''
 UNION ALL
-- Recursive member definition
SELECT v.PARENT_BP_UUID, v.CURRENT_BP_UUID, v.BP_ID, v.BP_NAME, t.Level + 1, t.CURRENT_BP_UUID
  FROM PO_TRACKING_BP AS v
       INNER JOIN tree AS t
         ON t.CURRENT_BP_UUID = v.PARENT_BP_UUID
)   
  SELECT BP_NAME,PARENT_BP_UUID,CURRENT_BP_UUID,BP_ID, Level
    FROM tree
ORDER BY ROOT_ID ASC, Level ASC
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h49.


 
 
 
 
Partenaires

Hébergement Web