说我有一个员工表,有我公司的每个员工的记录,以及一个主管的列(如下所示).我想编写一份报告,其中列出了监督线上每一步的名称和标题.例如,对于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
更多: