2012-09-24 9 views
1

Je veux exécuter une phrase SQL, il y a deux tablesComment obtenir des données hiérarchiques

Table Name  Description 
*********  ********* 
H_person Employee Data 
Modelorg Position Data 

Je veux écrire un sql qui montre « qui est connecté à qui ». Dans le tableau de h_person

Fıeld Name  Description 
*********  ********* 
p_no  Employee ID 
P_ad  Employee Name 
P_soyad Employee Surname 
P_pzsyn Employee Position ID 

Dans Modelorg Tableau

Fıeld Name  Description 
*********  ********* 
Pozkod  Position ID 
Pozad  Position Name 
USTPOZKOD the upper position (POZKOD connected to USTPOZKOD) 

USTPOZKOD est aussi le POZKOD en même temps, il y a une connexion hierarchial.

  1. Je voudrais former un rapport montre personne ID, nom, prénom, Position, Nom Upper Position, ID Manager et Maneger Nom-Nom (Helding supérieur ID Position). De plus, parfois Upperpostion peut être vide et lors de l'exécution du rapport, il sera nul. Je voudrais ajouter une règle Si upperposition est nul, apporter 2 niveau de gestionnaire supérieur

    Dans H_person Tableau First Data * *** ** P_no = 14556 P_ad = John p_Soyad = Onel P_Pzsyn = 72878/compte Spécialiste Deuxième données P_no = 14656 P_ad = Sara p_Soyad = Yildiz P_Pzsyn = 5455/Account Manager * *** ** Dans Modelorg Tableau Pozkod = 72878 Pozad = Compte spécialiste Ustpozkod = 5455 (Account Manager) USTPOZKOD est en même temps un pozkod.

  2. select p_no, p_ad, p_soyad, Pozad, USTPOZKOD (nous avons connecté pozkod à USTPOZKOD et je woul aime apporter « qui a tenu ce USTPOZKOD (nom, prénom) de h_person, modelorg.

  3. USTPOZKOD est aussi égal à POZKOD parce que quelqu'un helds cette position

+3

Quel SGBD utilisez-vous? –

+0

Microsoft Server 2008 – user1694217

+1

Ensuite, utilisez la réponse de flem. –

Répondre

1

Vous devez utiliser un common table expression (CTE) pour construire la requête récursive

un exemple:.

WITH #rec AS 
(
    SELECT ID, ParentID 
    FROM RecTable 
    WHERE ParentID = 0 

    UNION ALL 

    SELECT R.ID, R.ParentID 
    FROM RecTable R 
    INNER JOIN #rec P ON R.ParentID = P.ID 
) 
SELECT * 
FROM #rec 
+0

Permettez-moi de donner un exemple In H_person Table – user1694217

Questions connexes