SQL笔记 - CTE递归实例:显示部门全称
2014-01-11 21:49
399 查看
昨天在整理JS的Function时,示例是一个递归函数。说起递归,想起前段时间在搞CTE,那个纠结呀,看似容易,可我总抓不住门道,什么递归条件,什么结束条件,一头雾水。。。今天一大早就爬起来,果然不负有心人,顺利地完成,废话不多说。
场景: 有一个部门表:部门ID,部门名称,父部门ID,部门层次,需要显示部门的全名称(一级部门和二级部门直接显示,其余的格式:父部门名称+/本部门名称)
先做个测试,递归实现部门层次
结果完全一致:(这次竟然一下子就OK了,不可思议哦)
下面就是显示部门名称:可以用UnitName 累加,加就加呗, 但是需要设置下部门名称的类型。
执行前,先插入个四级部门:
结果:
------ Perfect! ~\(≧▽≦)/~
参考:
/article/5298192.html
/article/4677374.html
/article/4740834.html
场景: 有一个部门表:部门ID,部门名称,父部门ID,部门层次,需要显示部门的全名称(一级部门和二级部门直接显示,其余的格式:父部门名称+/本部门名称)
先做个测试,递归实现部门层次
-- To implement a Recursion using CTE ; -- Separate to other sentence With CTE_Unit_Level -- test: show the level of every Unit as( select UnitID, UnitName, ParentUnitID, UnitLevel, 1 as ULevel from Unit where ParentUnitID = 0 Union All -- Essential select U.UnitID, U.UnitName, U.ParentUnitID, U.UnitLevel,(CU.ULevel + 1) as ULevel from Unit as U Inner Join CTE_Unit_Level as CU on U.ParentUnitID = CU.UnitID ) -- show the result select * from CTE_Unit_Level
结果完全一致:(这次竟然一下子就OK了,不可思议哦)
下面就是显示部门名称:可以用UnitName 累加,加就加呗, 但是需要设置下部门名称的类型。
; With CTE_Unit_Name -- test: show the full name of every Unit as( select UnitID, --UnitName, Cast(UnitName as nvarchar(max)) as UnitName, --Essential! ParentUnitID from Unit where ParentUnitID = 0 Union All -- Essential select U.UnitID, ( ( Case CU.ParentUnitID When 0 Then '' Else CU.UnitName + '/' End ) + U.UnitName ) as UnitName, U.ParentUnitID from Unit as U Inner Join CTE_Unit_Name as CU on U.ParentUnitID = CU.UnitID ) select * from CTE_Unit_Name
执行前,先插入个四级部门:
-- insert a unit of Level 4 insert into Unit values('客服部', 8, 4)
结果:
------ Perfect! ~\(≧▽≦)/~
参考:
/article/5298192.html
/article/4677374.html
/article/4740834.html
相关文章推荐
- 十步完全理解SQL
- Redis学习资源
- Redis学习资源
- 十步完全理解SQL
- Memcached 解析五
- Memcached 解析四
- Memcached 解析三
- Memcached 解析二
- 使用exp/imp工具对“oracle数据库”进行简单的导出及导入操作
- Memcached 解析一
- oracle中关于flashback闪回的介绍
- LINQ(数据库操作增、删、改及并发管理)
- 十步完全理解SQL
- mysql 查询当天数据
- Oracle11G+win8环境下配置PL/SQL Developer(版本7.1.5.1398)
- mysql 执行顺序 SQL语句执行顺序分析
- MySQL-SQL语句中SELECT语句的执行顺序
- 10个简单步骤,完全理解SQL
- DS5020配置集群存储
- 如何在linux下启动oracle 服务