MSSQL 递归CTE的应用通过子级获取所有对应的父级及其本身(二)
2015-06-09 16:49
573 查看
引言:
还是一样的数据结构(参照:MSSQL 下递归CTE的应用通过父级获取所有对应的子级节点(一)),这次通过CTE实现通过子级节点获取对应的所有父级节点及其本身,本质和通过父级获取子级没有什么不同,只是递归入口改变了而已代码:
///<summary> ///人力资源管理_获取当前选中树节点的所有父Id ///</summary> ///<param name="CurNodeId">选中的树节点Id</param> ///<returns></returns> [LogicMethod] public string GetParentIdOfCurNode(string CurNodeId) { StringBuilder sb = new StringBuilder(); sb.AppendLine("With SearchTree as ("); //获取单位类别Id sb.AppendLine("Select PMIS_SysOrganizationTypeId pId"); sb.AppendLine("From PMIS_SysOrganizationType "); sb.AppendLine("Where PMIS_SysOrganizationTypeId='"+CurNodeId+"'" +" Union all "); //获取单位id sb.AppendLine("Select SysOrganizationId"); sb.AppendLine("From SysOrganization"); sb.AppendLine("Where SysOrganizationId='" + CurNodeId + "'"+" Union all "); //获取部门Id sb.AppendLine("Select SysBusinessUnitId"); sb.AppendLine("From SysBusinessUnit"); sb.AppendLine("Where SysBusinessUnitId='"+CurNodeId+"'"+" Union all "); //递归单位类别 sb.AppendLine("Select s.ParentId"); sb.AppendLine("From PMIS_SysOrganizationType s "); sb.AppendLine("join SearchTree st on s.PMIS_SysOrganizationTypeId=st.pId" + " Union all "); //递归单位(父亲为类别时) sb.AppendLine("Select so.[Type] Pid"); sb.AppendLine("From SysOrganization so "); sb.AppendLine("inner join SearchTree st on so.SysOrganizationId=st.pId"+" Union all"); //递归单位(父亲为上级单位时) sb.AppendLine("Select sor.ParentSysOrganizationId Pid"); sb.AppendLine("From SysOrganization so "); sb.AppendLine("join SysOrgRelation sor on sor.ChildSysOrganizationId=so.SysOrganizationId"); sb.AppendLine("inner join SearchTree st on sor.ParentSysOrganizationId=st.pId" + " Union all "); //单位递归部门 sb.AppendLine("Select suo.SysOrganizationId Pid"); sb.AppendLine("From SysBusinessUnit sbu "); sb.AppendLine("join SysUnitOrg suo on suo.SysBusinessUnitId=sbu.SysBusinessUnitId"); sb.AppendLine("inner join SearchTree st on suo.SysBusinessUnitId=st.pId" + " Union all "); //部门递归部门 sb.AppendLine("Select sur.ParentSysUnitId"); sb.AppendLine("From SysBusinessUnit sbu"); sb.AppendLine("join SysUnitRelation sur on sur.ChildSysUnitId=sbu.SysBusinessUnitId"); sb.AppendLine("Inner join SearchTree st on sur.ChildSysUnitId=st.pId)"); sb.AppendLine("Select distinct pId from SearchTree Where pId is not null"); string getAllPId = sb.ToString(); string allPIds = SysDba.Adapter.ExecuteToJSON(getAllPId); return allPIds; }
相关文章推荐
- Oracle 别名
- MySQL数据库SQL语句整合
- Mybatis学习(6)动态sql语句
- oracle 数据库 表空间创建 用户创建 用户授权
- MSSQL 下递归CTE的应用通过父级获取所有对应的子级节点(一)
- mysql_li async 一步查询
- C#使用SQLDMO操作数据库的方法
- org.tinygroup.jsqlparser-SQL解析器
- Oracle中打开10046 Trace的各种方法
- centOs 安装redis,集群
- org.tinygroup.dbrouter-数据库分区分表
- org.tinygroup.database-数据库元数据定义
- org.tinygroup.tinydb-数据库开发组件
- Redis学习
- SQL注入漏洞全接触--高级篇 [3]
- Oracle中函数/过程返回多个值(结果集)
- Redis dictScan反向二进制迭代器
- navicat for mysql 10.1.7注册码
- 【mysql5.6】SQL基础
- sql常见操作