Alb*_*ert 15 sql sql-server sql-server-2008
假设我有一张员工表,其中包含我公司每位员工的记录,以及一份主管专栏(如下所示).我想准备一份报告,其中列出了监管线中每个步骤的名称和标题.例如,对于迪克罗宾斯,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
Run Code Online (Sandbox Code Playgroud)
真正的数据可能不会超过10个级别...但我宁愿不只是做10个外部联接...我希望有比这更好的东西,并且比游标更少参与.
谢谢你的帮助.
Nei*_*l N 21
这基本上是我在OP评论中链接到的问题的接受答案的一个端口.
你可以使用公用表表达式
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
Run Code Online (Sandbox Code Playgroud)
更多:
| 归档时间: |
|
| 查看次数: |
16561 次 |
| 最近记录: |