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以了解详细信息
| 归档时间: |
|
| 查看次数: |
20524 次 |
| 最近记录: |