2010-07-27 15 views
2

J'ai une table "Employé" avec une colonne "EmployeeID" et une colonne représentant le boss de l'employé (BossID) qui à son tour est un employé dans la table "Employé". Comment puis-je tracer la hiérarchie d'un "EmployeeID" donné au Boss le plus haut. Je ne veux pas une jointure réflexive approche dans ce domaine, aussi j'utilise SQL Server 2005.Trace une hiérarchie dans un tableau

Merci

Manu

+0

Vous recherchez un type de procédure stockée? Je pense que c'est impossible avec cette mise en page de base de données sans auto-joignant ou utilisant une procédure stockée. – theomega

+3

J'ai ajouté une balise 'hierarchical-data'. Cette question et les questions connexes ont été soulevées des dizaines de fois sur Stack Overflow. Vous pouvez gagner beaucoup de temps en faisant un peu de recherche avant de demander. –

Répondre

6

Vous devez utiliser une sorte d'auto y adhérez à la structure de la table que vous décrivez mais peut utiliser un CTE récursif pour cela pour gérer les profondeurs arbitraires de la hiérarchie si c'était le problème?

WITH cte AS 
(
SELECT EmployeeID, BossId 
FROM Employee where EmployeeID = @EmployeeID 
UNION ALL 
SELECT e.EmployeeID, e.BossId 
FROM Employee e JOIN cte ON cte.BossId = e.EmployeeID 
) 
SELECT EmployeeID 
FROM cte