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