-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path03_views.sql
More file actions
76 lines (73 loc) · 1.78 KB
/
03_views.sql
File metadata and controls
76 lines (73 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
USE attendance_db;
-- View: Daily Work Metrics
CREATE OR REPLACE VIEW v_daily_work AS
SELECT
a.att_id,
a.att_date,
a.check_in,
a.check_out,
e.emp_id,
e.emp_code,
e.full_name,
d.dept_name,
ROUND(TIMESTAMPDIFF(HOUR, a.check_in, a.check_out), 2) AS hours_worked,
CASE
WHEN HOUR(a.check_in) >= 10 THEN 1
ELSE 0
END AS is_late,
GREATEST(
ROUND(TIMESTAMPDIFF(HOUR, a.check_in, a.check_out), 2) - 8,
0
) AS overtime_hours
FROM attendance a
JOIN employees e ON e.emp_id = a.emp_id
JOIN departments d ON d.dept_id = e.dept_id;
-- View: Monthly Summary
CREATE OR REPLACE VIEW v_monthly_summary AS
SELECT
e.emp_id,
e.emp_code,
e.full_name,
d.dept_name,
DATE_FORMAT(a.att_date, '%Y-%m') AS month_year,
COUNT(*) AS total_present,
ROUND(SUM(TIMESTAMPDIFF(HOUR, a.check_in, a.check_out)), 2) AS total_hours,
SUM(
CASE
WHEN HOUR(a.check_in) >= 10 THEN 1
ELSE 0
END
) AS late_days,
ROUND(
SUM(
GREATEST(TIMESTAMPDIFF(HOUR, a.check_in, a.check_out) - 8, 0)
),
2
) AS overtime_hours
FROM attendance a
JOIN employees e ON e.emp_id = a.emp_id
JOIN departments d ON d.dept_id = e.dept_id
GROUP BY
e.emp_id,
e.emp_code,
e.full_name,
d.dept_name,
DATE_FORMAT(a.att_date, '%Y-%m');
-- View: Payroll Preview
CREATE OR REPLACE VIEW v_payroll_preview AS
SELECT
m.emp_id,
m.emp_code,
m.full_name,
m.dept_name,
m.month_year,
m.total_present,
m.total_hours,
m.late_days,
m.overtime_hours,
e.base_salary,
e.overtime_rate,
ROUND(m.overtime_hours * e.overtime_rate, 2) AS overtime_pay,
ROUND(e.base_salary + (m.overtime_hours * e.overtime_rate), 2) AS total_salary
FROM v_monthly_summary m
JOIN employees e ON e.emp_id = m.emp_id;