SQL笔记

王朝学院·作者佚名  2016-05-26
窄屏简体版  字體: 小  |  中  |  大  |  超大  

SQL笔记 - CTE递归实例:显示部门全称昨天在整理JS的Function时,示例是一个递归函数。说起递归,想起前段时间在搞CTE,那个纠结呀,看似容易,可我总抓不住门道,什么递归条件,什么结束条件,一头雾水。。。今天一大早就爬起来,果然不负有心人,顺利地完成,废话不多说。

场景: 有一个部门表:部门ID,部门名称,父部门ID,部门层次,需要显示部门的全名称(一级部门和二级部门直接显示,其余的格式:父部门名称+/本部门名称)

先做个测试,递归实现部门层次

1 -- To implement a Recursion using CTE 2 ; -- Separate to other sentence 3 With CTE_Unit_Level -- test: show the level of every Unit 4 as( 5 select UnitID, UnitName, ParentUnitID, UnitLevel, 1 as ULevel 6 from Unit 7 where ParentUnitID = 0 8 Union All -- Essential 9 select U.UnitID, U.UnitName, U.ParentUnitID, U.UnitLevel,(CU.ULevel + 1) as ULevel10 from Unit as U11 Inner Join CTE_Unit_Level as CU12 on U.ParentUnitID = CU.UnitID 13 )14 -- show the result15 select * from CTE_Unit_Level

结果完全一致:(这次竟然一下子就OK了,不可思议哦)

下面就是显示部门名称:可以用UnitName 累加,加就加呗, 但是需要设置下部门名称的类型。

1 ; 2 With CTE_Unit_Name -- test: show the full name of every Unit 3 as( 4 select UnitID, 5 --UnitName, 6 Cast(UnitName as nvarchar(max)) as UnitName, --Essential! 7 ParentUnitID 8 from Unit 9 where ParentUnitID = 010 Union All -- Essential11 select U.UnitID, 12 (13 (14 Case CU.ParentUnitID15 When 0 Then ''16 Else CU.UnitName + '/'17 End18 ) + U.UnitName19 ) as UnitName, 20 U.ParentUnitID21 from Unit as U22 Inner Join CTE_Unit_Name as CU23 on U.ParentUnitID = CU.UnitID 24 )25 select * from CTE_Unit_Name

执行前,先插入个四级部门:

1 -- insert a unit of Level 42 insert into Unit3 values('客服部', 8, 4)

结果:

------ Perfect! ~\(≧▽≦)/~

参考:

http://www.cnblogs.com/xfrog/archive/2010/10/10/1847462.html

http://www.cnblogs.com/CareySon/archive/2011/12/12/2284740.html

http://www.cnblogs.com/nokiaguy/archive/2009/01/31/1381562.html

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航