[/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 关联起来, 然后使用‘第二天、第三天和以后的日子都不会统计该雇员的严重性分数’ 条件, 即是’每个人前后相差一天‘
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
);
分享到:
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1. 用户角色 管理员 药店员工/药师 客户 2. 功能描述 管理员功能 用户管理 创建、编辑和删除药店员工和药师的账户。 设置不同用户的权限,确保敏感信息的安全。 库存管理 实时监控药品库存状态,设置库存预警,防止缺货或过期。 支持药品入库、出库和退货记录,自动更新库存数量。 商品管理 添加、编辑和删除药品信息,包括名称、规格、价格、生产厂家、有效期等。 分类管理药品,如处方药、非处方药、保健品等。 销售管理 查看和管理销售记录,生成每日、每周和每月的销售报表。 分析销售数据,了解畅销产品和季节性变化,以优化库存。 财务管理 监控药店的收入与支出,并生成财务报表。 管理支付方式(现金、信用卡、电子支付)及退款流程。 客户管理 记录客户的基本信息和购买历史,提供个性化服务。 管理会员制度,设置积分和优惠活动。 药品监管符合性 确保药店遵循相关法规,跟踪药品的进货渠道和销售记录。 提供合规报告,确保按规定进行药品管理。 报告与分析 生成各类统计报表,包括销售分析、库存分析和客户行为分析。 提供决策支持,帮助制定更好的经营策略。 药店员工/药师功能 销售操作 处理顾客的药
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
今天吴老师上课的时候说我.txt
检测骨架图像的交点Matlab代码.rar
MMC simulink 模块化多电平变流器 载波移相 双闭环仿真 输出谐波分析,线性自抗扰控制LADRC 有仿真文件
自动驾驶控制-斯坦利(stanely)算法路径跟踪仿真 matlab和carsim联合仿真搭建的无人驾驶斯坦利控制器仿真验证,可以实现双移线,圆形,以及其他自定义的路径跟踪。 跟踪效果如图,几乎没有误差,跟踪误差在0.05m以内。
TongRDS是redis的国产化替代品之一,里面含有相应的安装部署包及操作流程,详细介绍TongRDS的基本部署和基本开发使用。
基于mpvue实现豆瓣电影微信小程序@zce_mpvue-Douban
隔离型DCDC变器设计,LLC谐振变器闭环仿真,变频控制。 有自己做的对应明 ,十分详细。
Delphi in Depth - FireDAC.rar
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
ShellBox微信小程序,集日程查询、成绩查询、电费查询、图书查询等功能于一体的高校微信小软件_ShellBox
Java小程序项目源码,该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:小程序 后端框架:SSM/SpringBoot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven
微信小程序校园微社区_ zafuBBS
计算图像的多向特征编码 (Contour Code Representation)Matlab代码.rar
电池超级电容混合储能系统能量管理超级电容matlab simulink储能模型仿真,能量管理蓄电池充放电模型 相关参考。
武汉市新版劳动合同
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作