很多情况下,我们有必要把树形结构进行数据梳理。比如,要方便的过滤出一个父节点下的所有子节点等等。。。

这个时候,我们可以生成一个路径表字符串,在应用时只需要对该字符串进行索引即可达成目的。

目标:按图示的部门结构树,获取本身的完整路径字符串。比如,前道工序部门,其部门代码为PDTE,上级部门为PD生产部,按结构树获取到一个/PD/PDTE/的字符串。

  先来一个简单点的展示:

WITH T AS (SELECT     CAST('/' + DeptCode + '/' AS NVARCHAR(MAX)) AS DpPath, DeptRKEY AS DpKey
FROM Base_Department
WHERE (ILevel = 1)--指定父级起点
UNION ALL
SELECT CAST(t.DpPath + D.DeptCode + '/' AS NVARCHAR(MAX)) AS DpPath, D.DeptRKEY AS DpKey
FROM Base_Department AS D INNER JOIN
T ON D.ParentRKEY = T.DpKey)--设置递归关联
SELECT DpPath, DpKey FROM T--输出结果

  输出如下图:

  然后开个稍微复杂点的,带上级机构关联上:

WITH T AS (SELECT     '/' + CAST(DeptCode AS NVARCHAR(MAX)) + '/' AS DpPath, DeptRKEY AS DpKey, DeptNameLL AS DpNameLL, DeptNameLI AS DpNameLI, ILevel AS DpLevel, ISEQ AS DpSEQ,
BranchRKEY
FROM Base_Department
WHERE (ILevel = 1)
UNION ALL
SELECT CAST(t.DpPath + D.DeptCode + '/' AS NVARCHAR(MAX)) AS DpPath, D.DeptRKEY AS DpKey, D.DeptNameLL AS DpNameLL, D.DeptNameLI AS DpNameLI, D.ILevel AS DpLevel,
D.ISEQ AS DpSEQ, D.BranchRKEY
FROM Base_Department AS D INNER JOIN
T ON D.ParentRKEY = T.DpKey)
SELECT '/' + BranchCode + '/' AS DpPath, BranchCode AS DpKey, BranchNameLL AS DpNameLL, BranchNameLI AS DpNameLI, 0 AS DpLevel, 0 AS DpSEQ
FROM Base_Branch
UNION ALL
SELECT '/' + B.BranchCode + T.DpPath AS Expr1, STR(T.DpKey) AS DpKey, T.DpNameLL, T.DpNameLI, T.DpLevel, T.DpSEQ
FROM T INNER JOIN
Base_Branch AS B ON T.BranchRKEY = B.BranchRKEY

  输出如下:

  如果,某些场合下,就能很好的利用这个DpPath了。

SQL Server 根据树状结构表生成以/号分割的路由字符串的更多相关文章

  1. oracle存储过程删除树状结构的表数据

    今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢 思来想去觉得还是在sql里直接删除比较合适, 为什么呢? 第一,涉及数据库的读写操 ...

  2. oracle 树状结构递归 PL/SQL输出控制 包括空格输出控制

    树状结构 存储过程中通过递归构建,类似BBS回帖显示,代码共三段: 建表,插入数据,创建存储过程显示: 1.create table article(id number primary key,con ...

  3. EntityFrameworkCore 单表树状结构配置

    数据结构 public class TreeNode { [Key] public long Id { get; set; } public string NodeName { get; set; } ...

  4. python 生成 树状结构

    树状结构: 字典里只有一个键值对, key 为根, 值为一个列表, 列表里的某个或多个元素可以再进行分支(分支还是列表) 比如: 邮件的发件人, 收件人, 转发关系树状结构 forwarding_re ...

  5. 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  6. 浅谈oracle树状结构层级查询测试数据

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  7. sql Server中临时表与数据表的区别

    sql server 中临时表与数据表的区别 1.如何判断临时表和数据表已生成 --如何判断临时表是否已创建--- if exists(select * from tempdb..sysobjects ...

  8. 转:Sql Server中清空所有数据表中的记录

    如果要删除数据表中所有数据只要遍历一下数据库再删除就可以了,清除所有数据我们可以使用搜索出所有表名,构造为一条SQL语句进行清除了,这里我一一给各位同学介绍.   使用sql删除数据库中所有表是不难的 ...

  9. openerp学习笔记 对象间关系【多对一(一对一)、一对多(主细结构)、多对多关系、自关联关系(树状结构)】

    1.多对一(一对一)关系:采购单与供应商之间的关系 'partner_id':fields.many2one('res.partner', 'Supplier', required=True, sta ...

随机推荐

  1. eShopOnContainer 第一步

    运行结果截图: 操作流程: 1. git上clone 项目 windows版的docker并且安装成功,配置3核CPU,4G内存 vs 2017 (15.5)版本以上. 打开项目 eshopOnCon ...

  2. 模板引擎 引自 《PHP核心技术与最佳实践》

    随着web的发展,仅一门语言或者一种技术已经不能满足需求,分层架构显得越来越重要.在大型架构中,从来不会简单地应用php从头到尾实现一个完整的mvc架构.可能底层是c/java的支撑,负责密集运算和y ...

  3. Redis的强大之处

    [Redis的强大之处] 1.拥有对脚本的支持(此处是lua),脚本可选择性的缓存. 2.提供HyperLogLog计数器. 3.提供5种数据类型的全方位支持:List.Hash.Set.Ordere ...

  4. open File Browser in shell

    [maxosx] open /usr/include [ubuntu] 发现三个,如下: xdg-open xxxx.pdf gnome-open . nautilus . 喜欢把它alias一下 . ...

  5. 39. Combination Sum (Back-Track)

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  6. Oracle_in_not-in_distinct_minsu的用法

    create table a( id int, username ) ); create table b( id int, username ) ); ,'小明'); ,'小红'); ,'小君'); ...

  7. for 续6

    ---------siwuxie095             for 实际运用样例(/f 的使用不列出来):     for %%i in (*) do echo %%i 显示当前目录下 ,所有非文 ...

  8. [leetcode]141. Linked List Cycle判断链表是否有环

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...

  9. 企业招聘:UX设计师需要满足他们哪些期望?

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   为了确定2017年最有价值的用户体验技能和特质,我特地参考了150多份工作要求.最后,得出了以下 ...

  10. ajax 测试

    在学习SpringMVC的过程中,接触到ajax,顺便复习一下前面学习到的知识! 这篇博客中讲的比较详细 http://www.cnblogs.com/lsnproj/archive/2012/02/ ...