业务需求:找出同时在'管理岗', '工人岗'的人员。数据中只有0005满足条件,0006虽然有多个岗位,但是没有'管理岗'。
一、数据:
select t.employee_id,t.station_type_c,t.rowid from p_employ_history t order by t.employee_id
| EMPLOYEE_ID |
STATION_TYPE_C |
| 0001 |
工人岗 |
| 0002 |
工人岗 |
| 0003 |
管理岗 |
| 0004 |
管理岗 |
| 0005 |
管理岗 |
| 0005 |
工人岗 |
| 0006 |
工人岗 |
| 0006 |
工人岗 |
| 0006 |
待业岗 |
二、业务需求:找出同时在'管理岗', '工人岗'的人员。数据中只有0005满足条件,0006虽然有多个岗位,但是没有'管理岗'。
三、分析过程和结果:
分析:
--第一次分组:相同人员相同岗位只出现一次
select h.employee_id,h.station_type_c

分析过程和结果
分析过程和结果:
分析:
--第一次分组:相同人员相同岗位只出现一次
select h.employee_id,h.station_type_c
from p_employ_history h
where h.station_type_c in ('管理岗', '工人岗')
group by h.employee_id, h.station_type_c
解决:
select a.employee_id
from (
select h.employee_id
from p_employ_history h
where h.station_type_c in ('管理岗', '工人岗')
--第一次分组:相同人员相同岗位只出现一次
group by h.employee_id, h.station_type_c
) a
--第二次分组:相同人员的岗位统计
group by a.employee_id
having count(*) > 1

四、建表及记录语句

附:建表及记录语句
prompt PL/SQL Developer import file
prompt Created on 2006年10月11日 by Administrator
set feedback off
set define off
prompt Creating P_EMPLOY_HISTORY
create table P_EMPLOY_HISTORY
(
EMPLOYEE_ID VARCHAR2(20) not null,
START_D DATE not null,
END_D DATE,
STATION_TYPE_C VARCHAR2(8),
WORKTYPE_C VARCHAR2(8)
)
;
comment on column P_EMPLOY_HISTORY.WORKTYPE_C
is '所属工种';
alter table P_EMPLOY_HISTORY
add constraint PK_P_EMPLOY_HISTORY primary key (EMPLOYEE_ID, START_D);

prompt Disabling triggers for P_EMPLOY_HISTORY
alter table P_EMPLOY_HISTORY disable all triggers;
prompt Deleting P_EMPLOY_HISTORY
delete from P_EMPLOY_HISTORY;
commit;
prompt Loading P_EMPLOY_HISTORY
insert into P_EMPLOY_HISTORY (EMPLOYEE_ID, START_D, END_D, STATION_TYPE_C, WORKTYPE_C)
values ('0006', to_date('02-01-2006', 'dd-mm-yyyy'), null, '待业岗', '井下');
insert into P_EMPLOY_HISTORY (EMPLOYEE_ID, START_D, END_D, STATION_TYPE_C, WORKTYPE_C)
values ('0005', to_date('01-07-2006', 'dd-mm-yyyy'), null, '工人岗', '井下');
insert into P_EMPLOY_HISTORY (EMPLOYEE_ID, START_D, END_D, STATION_TYPE_C, WORKTYPE_C)
values ('0001', to_date('01-01-2005', 'dd-mm-yyyy'), to_date('01-01-2005', 'dd-mm-yyyy'), '工人岗', '高空');
insert into P_EMPLOY_HISTORY (EMPLOYEE_ID, START_D, END_D, STATION_TYPE_C, WORKTYPE_C)
values ('0002', to_date('01-01-2005', 'dd-mm-yyyy'), to_date('01-01-2005', 'dd-mm-yyyy'), '工人岗', '井下');
insert into P_EMPLOY_HISTORY (EMPLOYEE_ID, START_D, END_D, STATION_TYPE_C, WORKTYPE_C)
values ('0003', to_date('01-01-2005', 'dd-mm-yyyy'), to_date('01-01-2005', 'dd-mm-yyyy'), '管理岗', null);
insert into P_EMPLOY_HISTORY (EMPLOYEE_ID, START_D, END_D, STATION_TYPE_C, WORKTYPE_C)
values ('0004', to_date('01-01-2005', 'dd-mm-yyyy'), to_date('01-01-2005', 'dd-mm-yyyy'), '管理岗', null);
insert into P_EMPLOY_HISTORY (EMPLOYEE_ID, START_D, END_D, STATION_TYPE_C, WORKTYPE_C)
values ('0005', to_date('01-01-2005', 'dd-mm-yyyy'), to_date('01-01-2005', 'dd-mm-yyyy'), '管理岗', null);
insert into P_EMPLOY_HISTORY (EMPLOYEE_ID, START_D, END_D, STATION_TYPE_C, WORKTYPE_C)
values ('0006', to_date('01-01-2005', 'dd-mm-yyyy'), to_date('01-01-2005', 'dd-mm-yyyy'), '工人岗', '高空');
insert into P_EMPLOY_HISTORY (EMPLOYEE_ID, START_D, END_D, STATION_TYPE_C, WORKTYPE_C)
values ('0006', to_date('01-01-2006', 'dd-mm-yyyy'), null, '工人岗', '井下');
commit;
prompt 9 records loaded
prompt Enabling triggers for P_EMPLOY_HISTORY
alter table P_EMPLOY_HISTORY enable all triggers;
set feedback on
set define on
prompt Done.
