2010-01-01 4 views
2

J'ai une table comme ceci:liste parent get SQL Server

id name parent_id 
1 ab1 3 
2 ab2 5 
3 ab3 2 
4 ab4 null 
5 ab5 null 
6 ab6 null 

que je dois faire une requête avec l'identifiant d'entrée = 1 (pour un exemple) et les résultats seront comme ceci:

id name parent_id 
5 ab5 null 
2 ab2 5 
3 ab3 2 
1 ab1 3 

(Liste de tous les parents à tous les niveaux début à l'élément id = 1)

Répondre

5

Quelque chose comme ça peut-être?

WITH parents(id,name,parent,level) 
    AS 
    (
    SELECT 
     ID, 
     NAME, 
     PARENT, 
     0 as level 
    FROM 
     TABLE 
    WHERE ID = 1 
    UNION ALL 
    SELECT 
     ID, 
     NAME, 
     PARENT, 
     Level + 1 
    FROM 
     TABLE 
    WHERE 
     id = (SELECT TOP 1 parent FROM parents order by level desc) 
    ) 
    SELECT * FROM parents 
Questions connexes