`
liaobinxu
  • 浏览: 43303 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql解惑- 缺勤者问题

阅读更多
[/color][color=darkred][color=darkred][/color]问题: 这个问题是有Jim chupella 在CompuServe上的MS Access论坛上提出的。 他需要创建一个记录雇员缺勤率的数据库。使用的表
create table Absenteeism (
emp_id integer not null  references personel(emp_id),
absent_date date not null,
reason_code varchar2(40) not null references ExcuseList(reason_code),
severity_points integer not null check(severity_points between 1 and 4),
primary key(emp_id,absent_date)
);

  雇员的id号用来标识每个雇员。 reason_code是相关缺勤记录原因的简短文本描述(例如,被运送啤酒的卡车撞了,;今天不顺利,心情很糟糕,等等),它来自于一个不断增加增加的虚构列表。严重性积分severity_points)时候一个计分系统,对缺勤行为进行处罚性计分。
   如果雇员在一年的时间内严重性计分累计达到40分,就自动将该雇员解雇。 如果雇员连续缺勤超过一个天,就视为长病假, 而不是普通的缺勤。这时候第二天、第三天和以后的日子都
不会统计该雇员的严重性分数,这些天也不算做缺勤。
你的工作是编写实施的这两个业务规则的SQL, 如果需要也可以该模式


解答:看一看解雇员工的第一条规定, 最常见的设计错误是试图从表中删除第二、三天以及以后的天数。 这个方法使计算天数的查询变得混乱, 并很难查找从表中连续的病假
。 

首先要更改严重性惩罚分数(severity_points)可以为0, 这样可以使Absenteeism表中的记录雇员的长病期。只需要将severity_points改为check( severity_points between 0 and 4)
step1.创建一个Personel员工表
create table personel(
emp_id integer not null primary key,
emp_name varchar2(40) not null
);


create sequence personel_sequence 
increment by 1
start with 1
nomaxvalue 
nocycle
cache 10;


引用
//alter table personel add constraints PK_personel_emp primary key(emp_id);

insert into personel values(personel_sequence.nextval,'liaobinxu');
insert into personel values(personel_sequence.nextval,'fenerdong');
insert into personel values(personel_sequence.nextval,'孙翔');
insert into personel values(personel_sequence.nextval,'谢江');

step2.创建一个ExcuseList原因执行表
create table ExcuseList(
   reason_code varchar2(40) primary key not null,
   effective_date date not null
);

//表已经创建
insert into ExcuseList  values('long term illness','01-1月-2009');
insert into ExcuseList  values('absentess','01-1月-2009');
insert into ExcuseList  values('on a bussiness trip','01-1月-2009');
commit;

step3.创建一个缺勤表
create table Absenteeism (
emp_id integer not null  references personel(emp_id) on delete cascade,
absent_date date not null,
reason_code varchar2(40) not null references ExcuseList(reason_code),
severity_points integer not null check(severity_points between 0 and 4),
primary key(emp_id,absent_date)
);

由于在开除员工,为让倚赖它的表产生数据统一性,必须在emp_id上加入 on delete cascade, 修改severity_points的check约束 在0,4之间, 不管用alter table absenteeism modify (severity_points integer check(severity_points between 0 and 4));
插入数据
使用了insert into table_name (col_1,col2,...) (select col_1 ,select col_2 from (select col_1,col_2 from table_nam2 ))

由于absenteeism表没有数据,而且插入的数据与时间有关系。absenteeism中emp_id来来自personel表的emp_id,absent_date于时间有关系(要求absent_date不能在同一个用户产生的相同的日期),reason_code来自ExcusteList表中,severity_points是在0和4之间的整数
create or replace procedure proc_Absenteeism_insert
as
start_date date;
begin
start_date:=sysdate;
for i in 0..9999
loop
    insert into
    Absenteeism (emp_id,absent_date,reason_code,severity_points)
    (
    select emp_id ,insdate,reason_code,spoints 
    from (    
        select p.emp_id,to_date('1-3-2009','dd-mm-yyyy')+i insdate,
        e.reason_code ,
        trunc(dbms_random.value(0,5)) spoints
        from 
        personel p ,ExcuseList e 
        order by dbms_random.value 
   ) 
   where rownum<2
);
end loop;
end;

//执行procedure

exec proc_absenteeism_insert;

引用
用时6秒

step4. 更改长病期和删除超过40分的雇员

更新数据要求连续两次或这迟到两次以上视为病假,并且为长病假,而不是普通的缺勤。
一个相同的表使用子查询 a1.id=a2.id 关联起来, 然后使用&lsquo;第二天、第三天和以后的日子都不会统计该雇员的严重性分数&rsquo; 条件, 即是&rsquo;每个人前后相差一天&lsquo;
update absenteeism a1
set severity_points=0,
   reason_code='long term illness'
where exists
    (select * from absenteeism a2 where    a1.emp_id=a2.emp_id and a1.absent_date-1=a2.absent_date);

已经更新2478行

由于插入数据时概率过大,把严重性惩罚分数40, 改为130分
delete * from personel  where emp_id in(
select emp_id from absenteeism  where absent_date between sysdate  and 
add_months(sysdate,12) group by emp_id having
sum(severity_points)>=130
);
分享到:
评论

相关推荐

    SQL案例专题-缺勤者.pdf

    本文档主要讨论了如何使用SQL语言来解决缺勤者问题。缺勤者问题是指如何记录和计算员工的缺勤情况,以便对其进行管理和惩罚。该问题的提出者是Jim Chupella,他需要创建一个数据库来记录员工的缺勤情况,并根据缺勤...

    参考资料-缺勤处理方法.zip

    "参考资料-缺勤处理方法.zip"这个压缩包文件很可能包含了一份详细的操作指南,旨在帮助人力资源部门或管理者有效地处理员工的缺勤问题。缺勤处理不仅仅是记录员工未到岗的情况,还包括理解可能的原因、制定相关政策...

    Excel表格+Word文档各类各行业模板-缺勤处理办法.doc

    Excel表格+Word文档各类各行业模板-缺勤处理办法.doc

    Excel表格+Word文档各类各行业模板-缺勤处理办法.zip

    "Excel表格+Word文档各类各行业模板-缺勤处理办法.zip"这个压缩包文件提供了适用于不同行业和场景的模板,特别关注了如何有效处理员工缺勤的问题。以下是关于这两个工具以及缺勤处理办法的一些详细知识。 首先,...

    基于Servlet+mysql+jsp学生宿舍信息管理系统

    3.学生-缺勤记录 4.学生-修改密码 5.宿舍管理员-主页面 6.宿舍管理员-学生查看 7.宿舍管理员-缺勤记录 8.系统管理员-宿舍管理员管理 9.系统管理员-学生管理 10.系统管理员-宿舍楼管理 11.系统管理员-缺勤记录 详情...

    基于Servlet+mysql+jsp学生宿舍信息管理系统(高分课设)

    3.学生-缺勤记录 4.学生-修改密码 5.宿舍管理员-主页面 6.宿舍管理员-学生查看 7.宿舍管理员-缺勤记录 8.系统管理员-宿舍管理员管理 9.系统管理员-学生管理 10.系统管理员-宿舍楼管理 11.系统管理员-缺勤记录 详情...

    经典SQL脚本大全

    │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 text与ntext字段的复制和合并处理示例.sql │ │ 3.7.4 text与image字段转换处理示例.sql │ │ 3.7.5 ntext字段的REPLACE处理示例.sql │...

    学生考勤管理程序报告

    传统的手工记录方式效率低下,易出错,因此开发一个学生考勤管理程序成为了解决这一问题的有效途径。通过计算机化的管理,可以提高考勤数据的准确性,方便教师和管理员进行数据分析,从而更好地管理和指导学生。 ...

    8-11月缺勤数据.rar

    3. **数据分析**:通过这些数据,可以进行各种统计分析,例如计算每月平均缺勤率、各部门缺勤对比、识别连续缺勤或频繁缺勤的员工等,以评估员工福利政策的效果或识别潜在的管理问题。 4. **人力资源决策**:这些...

    论文研究 - 员工缺勤:加纳教育局Wa市政教育处的案例

    缺勤是世界上的一项重要实践,因为工人在工作场所的持续存在对实现任何部门或机构的目标至关重要。 结果,管理层可能无法实现其目标。 因此,本文将通过在Municipal市教育办公室检查此事作为案例分析,从而加深对该...

    数据库课程设计——工资管理系统--职工考勤管理系统(java+sql-sever-2000).doc

    1. 员工考勤管理:记录员工的出勤情况,包括缺勤扣款。 2. 员工津贴管理:根据加班时间、类别等因素计算加班津贴。 3. 员工基本信息管理:存储员工的基本信息,如工种、等级和基本工资。 4. 月工资计算:根据员工的...

    缺勤处理办法.zip

    在企业管理和人力资源领域,缺勤处理办法是一项至关重要的工作流程,它涉及到员工的考勤管理、劳动纪律以及公司的正常运营。这份名为“缺勤处理办法.zip”的压缩包文件,内部包含了一个名为“缺勤处理办法.doc”的...

    WS 357.14-2016学校缺勤缺课监测报告1

    WS 357.14-2016学校缺勤缺课监测报告1

    美国会计准则中文版10带薪缺勤-reviewedbyCathy-ok.pdf

    4. **案例研究**:以A公司为例,展示了如何计算和处理带薪缺勤的会计问题。A公司在每个财政年度初会根据员工过去的工作积累来确定他们的带薪缺勤权利。然后,根据员工实际使用的天数和预期未来将使用的天数,来计算...

    Sqlserver2000经典脚本

    -列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 ...

    因病缺勤追踪记录表[整理].pdf

    1. 表格目的:该文件是一份用于记录学生(包括幼儿)因病缺勤情况的追踪记录表。它的主要用途在于追踪学生的病情以及缺勤的详细情况。 2. 表格结构:表格包含多个栏目,用于详细记录学生的个人信息、缺勤详情以及...

    Node.js-TimeOffManagement简单但强大的缺勤管理软件适合于中小型企业

    为了帮助管理层了解员工的缺勤情况,应用可能内置了数据分析功能,生成请假趋势报告,便于决策者制定更有效的管理策略。 9. **错误处理与日志记录** 使用如Winston或Bunyan的日志库可以帮助记录和分析应用运行中...

    2018企业缺勤成本调研报告.rar

    报告基于大量数据和案例研究,为管理者提供了理解和解决员工缺勤问题的宝贵参考。 一、缺勤成本的概念与构成 缺勤成本是指由于员工未能按计划出勤,导致企业产生的直接和间接经济损失。这些成本包括但不限于替换...

Global site tag (gtag.js) - Google Analytics