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

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 OrganizeTree AS ( 
SELECT OrganizationalName, ParentOrganizationalID, OrganizationalID,IsDisable,ParentOrganizationalID as ppd FROM aapbu.Organizational
WHERE  IsDisable=0 and OrganizationalID in(select  OrganizationalID FROM aapbu.Organizational  where ParentOrganizationalID ='' )
 UNION ALL 
SELECT ot.OrganizationalName, ot.ParentOrganizationalID, ot.OrganizationalID,ot.IsDisable,OrganizeTree.ParentOrganizationalID as ppd from OrganizeTree 
JOIN aapbu.Organizational ot on OrganizeTree.OrganizationalID = ot.ParentOrganizationalID
where ot.IsDisable=0
 )
SELECT  OrganizationalName, ParentOrganizationalID, OrganizationalID,IsDisable,ppd FROM OrganizeTree

猜你喜欢

转载自blog.csdn.net/ybb350680013/article/details/89096209