父/子层次结构树视图

Rob*_*Rob 4 sql-server treeview hierarchy

我有一个父母表看起来像这样

CHILD_ID | PARENT_ID | NAME
1        | Null      | Bill
2        | 1         | Jane
3        | 1         | Steve
4        | 2         | Ben
5        | 3         | Andrew
Run Code Online (Sandbox Code Playgroud)

我喜欢得到这样的结果集

Bill
---Jane
------Ben
---Steve
------Andrew
Run Code Online (Sandbox Code Playgroud)

我知道我需要做一个排名查询来排名水平和自我加入,但我能在网上找到的只是CTE递归

我以前在Oracle中完成了这个,但在MS SQL中没有

kaj*_*kaj 10

有点hacky,可以改进,但希望它显示原则......

;with relation (childId, parentId, childName, [level], [orderSequence])  
as  
(  
select childId, parentId, childName, 0, cast(childId as varchar(20))  
from @parents  
where parentId is null  
union all  
select p.childId, p.parentId, r.[level]+1, cast(r.orderSequence + '_' + cast(p.childId as varchar) as varchar(20))  
from @parents p  
inner join relation r on p.parentId = r.childId  
)  

select right('----------', ([level]*3)) +childName  
from relation  
order by orderSequence
Run Code Online (Sandbox Code Playgroud)

但是,如果您想避免递归,那么另一种方法是使用相关的树结构信息实现树表 - 请参阅http://www.sqlteam.com/article/more-trees-hierarchies-in-sql以了解详细信息