加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:53:54 所属栏目:MsSql教程 来源:网络整理
导读:说我有一个员工表,有我公司的每个员工的记录,以及一个主管的列(如下所示).我想编写一份报告,其中列出了监督线上每一步??的名称和标题.例如,对于dick robbins,1d#15,我想在他的“命令链”中的每个主管的名单,一直到总统,大奶酪.我想避免使用光标,但如果这是唯
说我有一个员工表,有我公司的每个员工的记录,以及一个主管的列(如下所示).我想编写一份报告,其中列出了监督线上每一步??的名称和标题.例如,对于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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读