0.原数据

1.查询某一节点下的所有节点

;WITH OrganizeTree AS ( SELECT OrganizationalName, ParentOrganizationalID, OrganizationalID FROM aapbu.Organizational
 --WHERE ParentOrganizationalID = '1001'
 UNION ALL 
SELECT ot.OrganizationalName, ot.ParentOrganizationalID, ot.OrganizationalID from OrganizeTree 
JOIN aapbu.Organizational ot on OrganizeTree.OrganizationalID = ot.ParentOrganizationalID
 )
SELECT  OrganizationalName, ParentOrganizationalID, OrganizationalID FROM OrganizeTree

2.查询某一节点下的最底层 节点
;WITH OrganizeTree AS ( SELECT OrganizationalName, ParentOrganizationalID, OrganizationalID FROM aapbu.Organizational 
--WHERE ParentOrganizationalID = '1001'
UNION ALL 
SELECT ot.OrganizationalName, ot.ParentOrganizationalID, ot.OrganizationalID from OrganizeTree 
JOIN aapbu.Organizational ot on OrganizeTree.OrganizationalID = ot.ParentOrganizationalID)
,leaf as ( 
select l.OrganizationalName,l.ParentOrganizationalID,l.OrganizationalID from OrganizeTree l 
WHERE NOT EXISTS(SELECT c.OrganizationalName, c.ParentOrganizationalID, c.OrganizationalID FROM OrganizeTree c WHERE l.OrganizationalID = c.ParentOrganizationalID)
)
SELECT * FROM leaf

3.应用重点:查询根节点下递归子节点,并且按根节点分组!

;WITH OrganizeTop AS ( 
    SELECT OrganizationalName, ParentOrganizationalID, OrganizationalID,IsDisable FROM aapbu.Organizational
    WHERE  IsDisable=0 and  OrganizationalID in(select  OrganizationalID from aapbu.Organizational  where ParentOrganizationalID 
 =(select  OrganizationalID      FROM aapbu.Organizational  where ParentOrganizationalID ='' ) and IsDisable=0)
 )
SELECT  ROW_NUMBER() over(order by OrganizationalID) as row,OrganizationalName, ParentOrganizationalID, OrganizationalID,IsDisable,'' ppd into #OrganizeDemo FROM OrganizeTop
 
 declare @count int;
 declare @i int;   
 declare @topparent nvarchar(50);
 select @count = COUNT(1) from #OrganizeDemo;
 set @i = 1;
  while (@count >= @i)
    begin
        select @topparent = OrganizationalID from #OrganizeDemo where [row] = @i;
        ;WITH OrganizeTree AS ( 
            SELECT OrganizationalName, ParentOrganizationalID, OrganizationalID,IsDisable FROM aapbu.Organizational
            WHERE  IsDisable=0 and OrganizationalID=@topparent
             UNION ALL 
            SELECT ot.OrganizationalName, ot.ParentOrganizationalID, ot.OrganizationalID,ot.IsDisable from OrganizeTree 
            JOIN aapbu.Organizational ot on OrganizeTree.OrganizationalID = ot.ParentOrganizationalID
            where ot.IsDisable=0
         )
        SELECT  OrganizationalName, ParentOrganizationalID, OrganizationalID,IsDisable,@topparent as ppd into #OrganizeDemo1 FROM OrganizeTree
         
        if not exists(select * from tempdb..sysobjects where id=object_id('tempdb..#OrganizeDemoGroup'))
            SELECT * into #OrganizeDemoGroup FROM #OrganizeDemo1
        ELSE 
            insert into #OrganizeDemoGroup( OrganizationalName, ParentOrganizationalID, OrganizationalID,IsDisable,ppd)
                SELECT  * FROM #OrganizeDemo1

Drop table #OrganizeDemo1;

set @i = @i + 1;
    end

Drop table #OrganizeDemo;
 select * FROM #OrganizeDemoGroup
 Drop table #OrganizeDemoGroup;

PS:用了临时表完成此功能,如果有更好的,请大神指点一二,谢谢

mssql -递归查询组织机构某节点下所有及最底层,重点:按顶级分组相关推荐

  1. sql -递归查询组织机构某节点下所有及最底层

    1. 表 1.查询某一节点下的所有节点 WITH OrganizeTree AS ( SELECT name, pid, wid FROM Organize WHERE pid = '2362' UN ...

  2. java递归查询分类及分类下所有子分类

    该案例是实际开发中运用,java递归查询分类及分类下所有子分类. 代码走起: 1.jsp页面布局样式这里不再介绍,js业务逻辑展示分类树形结构如下: /*** 商品分类操作*//*** 初始化*/ $ ...

  3. mysql 递归查询所有子节点(子部门)返回id集合

    一.导读 当我们查询所有的当前部门下以及当前部门下面的所有子部门,需要就需要我们获取所有当前节点和子节点的id,这里使用mysql的递归查询来实现.查找给定分类编码查找分类及其所有子类,包含子类的子类 ...

  4. oracle获取所有子节点,oracle递归查询所有子节点

    Q4:Oracle通过递归查询父子兄弟节点方法示例 前言 说到Oracle中的递归查询语法,我觉得有一些数据库基础的童鞋应该都知道,做项目的时候应该也会用到,下面本文就来介绍下关于Oracle通过递归 ...

  5. TreeView对象选择某节点下所有节点与子节点

    // // // 函数: of_deselectall // // 属性: public    // // 参数: long al_handle // // 返回: integer // // 功能: ...

  6. 根据子节点递归查询所有父节点

    有个需求,需要根据给定的子节点向上递归查询所有父节点,网上查找了一些,但是都不是很满意,有的是需要用到全局变量定义存储列表,但是会有并发问题,然后自己手写一个 @Testvoid contextLoa ...

  7. MySQL递归查询所有下级节点

    MySQL递归查询所有下级节点. 先上SQL后来讲解其中的含义. select id from (select t1.id,t1.inviteId,if(find_in_set(inviteId, @ ...

  8. 【python之操作注册表】Python删除注册表节点下的值

    [python操作注册表]Python删除注册表节点下的值 背景 本来是别的平台的一个bug,以为自己去沟通然后让他们修就好了,结果又是这样别人的坑自己来填.主要是在卸载的时候要删除注册表下的所有节点 ...

  9. 地狱拷问:上万个节点下如何实现?

    最近不少读者留言提到"面试造火箭"现象.的确,现在进大厂的门槛越来越高,动不动就要求大规模 / 分布式 / 微服务的开发经验,而且面试的时候,甚至会深入到源码的层面发问.比如:如果 ...

最新文章

  1. 独家 | 每个业务分析专家应具备的9个关键技能
  2. 认识Linux设备驱动模型和Kobject
  3. WPF 3d坐标系和基本三角形
  4. python中readlines函数例子_Python的函数readlines(n)行为
  5. Visual C++——黄维通《 Visual C++面向对象与可视化程序设计》——习题4-5
  6. 【Python3 SelectKBest 调用personer出现的错误】
  7. PAT乙级 1027 打印沙漏
  8. 14-Scala之隐式转换
  9. Linux 命令(70)—— size 命令
  10. 贝叶斯集锦:从MC、MC到MCMC
  11. 3. static file process
  12. 机器学习笔记(二十):逻辑回归(2)
  13. 使用VUE分分钟写一个验证码输入组件
  14. 008/160 CrackMe Andrénalin #1
  15. 高程(DEM) ASCII数据获取
  16. 使用JS代码将steam喜加一的免费游戏删除。
  17. 雷军,扎克伯格,Linus 等巨佬的办公桌
  18. 功能最强大的编辑器——vi
  19. c语言日期计算器程序代码,用C语言写一个日期计算器
  20. 红米手机4A怎么样刷入开发版获得ROOT权限

热门文章

  1. word2019 添加 mathtype 加载项
  2. C语言:向一个有序数组中插入一个数据,并保持数组的有序性。
  3. NX二次开发-UFUN创建扫掠UF_MODL_create_sweep
  4. 劳保鞋批发,你找对地方了吗?
  5. 一起学Docker:Docker Desktop设置国内阿里镜像源
  6. zabbix添加自定义监控项
  7. 在为配钥匙发愁吗?无人AI钥匙机帮你配Hello Kitty定制钥匙!
  8. Maya如何打开大纲视图
  9. 北京定位金融中心称霸全球
  10. 完美解决小米6x没有busybox的方法