如何遍历树/使用SQL代码中的分层数据

前端之家收集整理的这篇文章主要介绍了如何遍历树/使用SQL代码中的分层数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说我有一个员工表,有我公司的每个员工的记录,以及一个主管的列(如下所示).我想编写一份报告,其中列出了监督线上每一步​​的名称标题.例如,对于dick robbins,1d#15,我想在他的“命令链”中的每个主管的名单,一直到总统,大奶酪.我想避免使用光标,但如果这是唯一的方法,那就没关系.
id  fname   lname   title   supervisorid
1   big     cheese  president   1
2   jim     william vice president  1
3   sally   carr    vice president  1
4   ryan    allan   senior manager  2
5   mike    miller  manager 4
6   bill    bryan   manager 4
7   cathy   maddy   foreman 5
8   sean    johnson senior mechanic 7
9   andrew  koll    senior mechanic 7 
10  sarah   ryans   mechanic    8
11  dana    bond    mechanic    9
12  chris   mcall   technician  10
13  hannah  ryans   technician  10
14  matthew miller  technician  11
15  dick    robbins technician  11

真正的数据可能不会超过10级,但我宁愿不要做10个外部连接…我希望有一些比那更好的东西,而不是光标的参与.

感谢任何帮助.

解决方法

这基本上是我在OP意见中链接到的问题的接受答案的一个端口.

您可以使用common-table表达式

With Family As 
( 
    Select e.id,e.supervisorid,0 as Depth
    From Employee e
    Where id = @SupervisorID 
    Union All 
    Select e2.ID,e2.supervisorid,Depth + 1
    From Employee e2
        Join Family 
            On Family.id = e2.supervisorid 
) 
Select *
From Family

更多:

Recursive Queries Using Common Table Expressions

猜你在找的MsSQL相关文章