当前位置: 代码迷 >> Sql Server >> with as 递归解决方案
  详细解决方案

with as 递归解决方案

热度:53   发布时间:2016-04-27 10:46:13.0
with as 递归
下边是个递归算法,我也执行过。with as知道是公用表表达式(CTE)
但是就是看不懂下边语句,不知道该怎么读

SQL code
with hgo as(   select *,0 as rank from #EnterPrise where DepartManage='Tom'   union all   select h.*,h1.rank+1 from #EnterPrise h join hgo h1 on h.ParentDept=h1.Department)




完整:
SQL code
create table #EnterPrise(  Department nvarchar(50),--部门名称  ParentDept nvarchar(50),--上级部门  DepartManage nvarchar(30)--部门经理)insert into #EnterPrise select '技术部','总经办','Tom'insert into #EnterPrise select '商务部','总经办','Jeffry'insert into #EnterPrise select '商务一部','商务部','ViVi'insert into #EnterPrise select '商务二部','商务部','Peter'insert into #EnterPrise select '程序组','技术部','GiGi'insert into #EnterPrise select '设计组','技术部','yoyo'insert into #EnterPrise select '专项组','程序组','Yue'insert into #EnterPrise select '总经办','','Boss'--查询部门经理是Tom的下面的部门名称;with hgo as(   select *,0 as rank from #EnterPrise where DepartManage='Tom'   union all   select h.*,h1.rank+1 from #EnterPrise h join hgo h1 on h.ParentDept=h1.Department)select * from hgo


------解决方案--------------------
那你只留2条数据,看看结果,这个东西要意会,比较难言传
------解决方案--------------------

 这个能看懂吧
这个是第一次递归的结果
然后

select h.*,h1.rank+1 from #EnterPrise h join 
(select *,0 as rank from #EnterPrise where DepartManage='Tom')
h1 on h.ParentDept=h1.Department
第二次

select h.*,h1.rank+1 from #EnterPrise h join 
(
select h.*,h1.rank+1 from #EnterPrise h join 
(select *,0 as rank from #EnterPrise where DepartManage='Tom')
h1 on h.ParentDept=h1.Department
)
h1 on h.ParentDept=h1.Department
第三次

然后 知道玩完
  相关解决方案