Staffer表(员工信息)内容如下ID* Name Age Dept1 Jack 25 IT2 Tom 26 IT3 Jessie 27 Sale4 Rose 26 Sale5 Steven 28 Market6 John 22 Market…Worktime表(一月30天全体员工上下班记录,假定30天均需考勤,如员工缺勤本表无相应

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/16 19:41:35
Staffer表(员工信息)内容如下ID*NameAgeDept1Jack25IT2Tom26IT3Jessie27Sale4Rose26Sale5Steven28Market6John22Marke

Staffer表(员工信息)内容如下ID* Name Age Dept1 Jack 25 IT2 Tom 26 IT3 Jessie 27 Sale4 Rose 26 Sale5 Steven 28 Market6 John 22 Market…Worktime表(一月30天全体员工上下班记录,假定30天均需考勤,如员工缺勤本表无相应
Staffer表(员工信息)内容如下
ID* Name Age Dept
1 Jack 25 IT
2 Tom 26 IT
3 Jessie 27 Sale
4 Rose 26 Sale
5 Steven 28 Market
6 John 22 Market

Worktime表(一月30天全体员工上下班记录,假定30天均需考勤,如员工缺勤本表无相应记录)
内容如下
ID* InTime OutTime DayNumber*
1 8:45 18:17 1
1 9:00 19:00 2

上表中*表示主键,假定上述数据表字段均不为空,公司规定上班时间为9:00,下班时间18:00,使用Sql语句或存储过程(函数)统计以下数据.
迟到、早退、缺勤员工姓名和对应日期
各部门员工日均工作时间(部门内员工总工作时间/30/部门人数)

Staffer表(员工信息)内容如下ID* Name Age Dept1 Jack 25 IT2 Tom 26 IT3 Jessie 27 Sale4 Rose 26 Sale5 Steven 28 Market6 John 22 Market…Worktime表(一月30天全体员工上下班记录,假定30天均需考勤,如员工缺勤本表无相应
--迟到
SELECT s.name 名字,
  w.daynumber 日期
FROM tbl_staff s,
  tbl_worktime w
WHERE s.id =w.id
AND to_date(w.intime,'hh24-mi-ss')>to_date('9:00','hh24-mi-ss') ;
--早退
SELECT s.name 名字,
  w.daynumber 日期
FROM tbl_staff s,
  tbl_worktime w
WHERE s.id =w.id
AND to_date(w.outtime,'hh24-mi-ss')<to_date('18:00','hh24-mi-ss');
--缺勤,暂时没想到好的
select name,1 daynumber from tbl_staff where id  not in(select id from tbl_worktime where daynumber=1)
union all
select name,2 daynumber from tbl_staff where id  not in(select id from tbl_worktime where daynumber=2)
union all
select name,3 daynumber from tbl_staff where id  not in(select id from tbl_worktime where daynumber=3)
...
select name,30 daynumber from tbl_staff where id  not in(select id from tbl_worktime where daynumber=30)
--部门日均工作时间
SELECT s.dept 部门,
  SUM(ceil((To_date(w.outtime , 'hh24-mi-ss') - To_date(w.intime , 'hh24-mi-ss')) * 24*60))/(30*COUNT(s.dept)) AS 按分钟计算
FROM tbl_staff s,
  tbl_worktime w
WHERE s.id=w.id
GROUP BY s.dept;