File size: 1,696 Bytes
19dfd32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
-- SQLite implementation of views and functions
-- This is simplified compared to the MySQL version

-- Drop views if they exist
DROP VIEW IF EXISTS v_full_employee;
DROP VIEW IF EXISTS v_full_department;
DROP VIEW IF EXISTS emp_dept_current;

-- Create helper view to get current department for employees
CREATE VIEW emp_dept_current AS
SELECT 
    e.emp_no,
    de.dept_no
FROM 
    employee e
JOIN 
    dept_emp de ON e.emp_no = de.emp_no
JOIN (
    SELECT 
        emp_no, 
        MAX(from_date) AS max_from_date
    FROM 
        dept_emp
    GROUP BY 
        emp_no
) latest ON de.emp_no = latest.emp_no AND de.from_date = latest.max_from_date;

-- View that shows employee with their current department name
CREATE VIEW v_full_employee AS
SELECT
    e.emp_no,
    e.first_name, 
    e.last_name,
    e.birth_date, 
    e.gender,
    e.hire_date,
    d.dept_name AS department
FROM
    employee e
LEFT JOIN
    emp_dept_current edc ON e.emp_no = edc.emp_no
LEFT JOIN
    department d ON edc.dept_no = d.dept_no;

-- View to get current managers for departments
CREATE VIEW current_managers AS
SELECT
    d.dept_no,
    d.dept_name,
    e.first_name || ' ' || e.last_name AS manager
FROM
    department d
LEFT JOIN
    dept_manager dm ON d.dept_no = dm.dept_no
JOIN (
    SELECT
        dept_no,
        MAX(from_date) AS max_from_date
    FROM
        dept_manager
    GROUP BY
        dept_no
) latest ON dm.dept_no = latest.dept_no AND dm.from_date = latest.max_from_date
LEFT JOIN
    employee e ON dm.emp_no = e.emp_no;

-- Create a view showing departments with their managers
CREATE VIEW v_full_department AS
SELECT
    dept_no,
    dept_name,
    manager
FROM
    current_managers;