想创建一个综合查询的视图,遇到一个棘手的问题。
有三个表,Employee(员工信息) EmpUnit(员工组织单元关系表) Unit(组织单元表)表的详细定义(由于列比较多所以只列出一些关键字段)表Employee
EmployeeId
表EmpUnit (一个员工对应一个直接组织单元另外还对应多个上级组织单元,也就是一对多的关系)
EmployeeId
UnitId
表Unit
UnitId
UnitLevel(标识这个组织单元的级别)问题:
想创建一个视图如下
员工Id | 一级组织单元Id | 二级组织单元Id | 三级组织单元Id请问这样的Sql因该如何制作,谢谢啦~
有三个表,Employee(员工信息) EmpUnit(员工组织单元关系表) Unit(组织单元表)表的详细定义(由于列比较多所以只列出一些关键字段)表Employee
EmployeeId
表EmpUnit (一个员工对应一个直接组织单元另外还对应多个上级组织单元,也就是一对多的关系)
EmployeeId
UnitId
表Unit
UnitId
UnitLevel(标识这个组织单元的级别)问题:
想创建一个视图如下
员工Id | 一级组织单元Id | 二级组织单元Id | 三级组织单元Id请问这样的Sql因该如何制作,谢谢啦~
SELECT EmpUnit.EmployeeId,
CASE WHEN Unit.UnitLevel = 1 THEN Unit.UnitId END,
CASE WHEN Unit.UnitLevel = 2 THEN Unit.UnitId END,
CASE WHEN Unit.UnitLevel = 3 THEN Unit.UnitId END
FROM EmpUnit,Unit WHERE EmpUnit.UnitId = Unit.UnitId ;
有如下数据EmployeeId EmployeeName
001 张三员工组织单元表(EmpUnit)中有EmployeeId UnitId
001 1
001 2
001 3组织单元表(Unit)中有UnitId UnitLevel upLeaveUnitId
1 1 1
2 2 1
3 3 2 ------------------------------------------------------------------------我想创建一个视图,可以查出类似这样一条数据EmployeeId UnitId(一级组织单元ID) Unit Id(二级组织单元ID) UnitId(三级组织单元ID)
001 1 2 3
---首先看一下表示组织单元级别的个数,select distinct unitlevel from unit;
---从楼主给的数据看,只有三个级别的组织单位ID
select employeeid,
(case when unitlevel=1 then unitid end) first,
(case when unitlevel=2 then unitid end) second,
(case when unitlevel=3 then unitid end) third
from (
select a.employeeid a.unitid b.unitlevel from empunit a,unit b
where a.unitid=b.unitid);得到这样的数据: 一级组织 二级组织 三级组织
001 1
001 2
001 3 ----然后再group by 一下就可以了!select employeeid,sum(nvl(first,0)),sum(nvl(second,0)),sum(nvl(third,0))
from
(select employeeid,
(case when unitlevel=1 then unitid end) first,
(case when unitlevel=2 then unitid end) second,
(case when unitlevel=3 then unitid end) third
from (
select a.employeeid a.unitid b.unitlevel from empunit a,unit b
where a.unitid=b.unitid))
group by employeeid;---这样就可以得到想要的数据了,如果你想得到部门的名称,就可以再和表Employee联合查询一下就OK了!