部门层级关系表

select a.ID,a.Grade,a.DepName,
case when (b.Grade='Grade1' or b.Grade='Grade2') then a.DepName
else coalesce(b.DepName,a.DepName) end
as ParentDep,
case when c.DepName is null then a.DepName  
when c.DepName='GDSBG' then b.DepName else c.DepName end
as BU,
coalesce(d.DepName,c.DepName,b.DepName,a.DepName) as BG
from
(select autoid as ID,PMIS_Department_code as DepName,PMIS_Department_Type as Grade,PMIS_Department_Name as ParentID
FROM PMIS_Department) a
left join
( select autoid as ID,PMIS_Department_code as DepName,PMIS_Department_Type as Grade,PMIS_Department_Name as ParentID
FROM PMIS_Department) b
on a.ParentID=b.ID
left join
(select autoid as ID,PMIS_Department_code as DepName,PMIS_Department_Type as Grade,PMIS_Department_Name as ParentID
FROM PMIS_Department)c
on b.ParentID=c.ID
left join
(select autoid as ID,PMIS_Department_code as DepName,PMIS_Department_Type as Grade,PMIS_Department_Name as ParentID
FROM PMIS_Department) d
on c.ParentID=d.ID

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7899089/viewspace-610106/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7899089/viewspace-610106/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现部门层级树,可以使用树形数据结构。以下是一个简单的 Java 实现示例: 首先,需要定义一个部门类,包含部门 ID、父部门 ID、部门名称等属性: ``` public class Department { private int id; private int parentId; private String name; // 构造方法、getter、setter 略 } ``` 接下来,可以定义一个方法,接收部门作为参数,返回一个根据部门层级关系构建的树形结构: ``` public static List<Department> buildDepartmentTree(List<Department> departmentList) { // 首先,将所有部门按照父部门 ID 分组 Map<Integer, List<Department>> departmentMap = departmentList.stream() .collect(Collectors.groupingBy(Department::getParentId)); // 然后,递归构建树形结构 List<Department> rootDepartments = departmentMap.get(0); for (Department department : rootDepartments) { buildDepartmentTree(department, departmentMap); } return rootDepartments; } private static void buildDepartmentTree(Department department, Map<Integer, List<Department>> departmentMap) { List<Department> subDepartments = departmentMap.get(department.getId()); if (subDepartments != null) { department.setSubDepartments(subDepartments); for (Department subDepartment : subDepartments) { buildDepartmentTree(subDepartment, departmentMap); } } } ``` 上述代码中,首先将所有部门按照父部门 ID 分组,然后从根节点开始递归构建树形结构,直到所有节点都被加入到树中。 最后,可以通过递归遍历树形结构,将部门层级树打印出来: ``` public static void printDepartmentTree(List<Department> departmentList, int level) { if (departmentList == null || departmentList.isEmpty()) { return; } for (Department department : departmentList) { System.out.println(String.join("", Collections.nCopies(level, "-")) + department.getName() + " (" + department.getId() + ")"); printDepartmentTree(department.getSubDepartments(), level + 1); } } ``` 这样,就可以通过以下代码来构建和打印部门层级树: ``` List<Department> departmentList = Arrays.asList( new Department(1, 0, "总公司"), new Department(2, 1, "财务部"), new Department(3, 1, "人力资源部"), new Department(4, 2, "财务一部"), new Department(5, 2, "财务二部"), new Department(6, 3, "招聘组"), new Department(7, 3, "培训组") ); List<Department> departmentTree = buildDepartmentTree(departmentList); printDepartmentTree(departmentTree, 0); ``` 输出结果如下: ``` 总公司 (1) -财务部 (2) --财务一部 (4) --财务二部 (5) -人力资源部 (3) --招聘组 (6) --培训组 (7) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值