Hi,
We have a database that keeps track of days worked and days taken off by
staff. All days worked / taken off are held in a table called Bookings.
Staff work on Projects and each project will have various Work_Types, days
taken off are not related to projects and are held in
Unavailability_Descriptions. I need to produce a capacity report to show
days worked vs time taken off per staff member per month for a particular
project i.e.
January February
John Smith
Work Type 1 12 ...
Work Type 2 5 ...
Work Type 3 5 ...
Sickness 1 ...
Holiday 2 ...
Total Days 19 ...
Capacity 106%
Joe Bloggs
Work Type 1 5 ...
Work Type 2 6 ...
Work Type 3 9 ...
Sickness 1 ...
Holiday 1 ...
Total Days 18 ...
Capacity 100%
...
We say that staff have an average of 18 working days per month availability.
I have managed to show the Days worked in a month with the following query
but am having trouble adding the unavailability and capacity:
SELECT
CONCAT_WS(' ', U.User_Firstname, U.User_Lastname) AS Name,
B.Booking_Type,
WT.Work_Type,
SUM(IF(MONTHNAME(BD.Date) = 'January' AND Year(BD.Date) = '2005', 1, 0)) AS
'January',
SUM(IF(MONTHNAME(BD.Date) = 'February' AND Year(BD.Date) = '2005', 1, 0)) AS
'February',
SUM(IF(MONTHNAME(BD.Date) = 'March' AND Year(BD.Date) = '2005', 1, 0)) AS
'March',
SUM(IF(MONTHNAME(BD.Date) = 'April' AND Year(BD.Date) = '2005', 1, 0)) AS
'April',
SUM(IF(MONTHNAME(BD.Date) = 'May' AND Year(BD.Date) = '2005', 1, 0)) AS
'May',
SUM(IF(MONTHNAME(BD.Date) = 'June' AND Year(BD.Date) = '2005', 1, 0)) AS
'June',
SUM(IF(MONTHNAME(BD.Date) = 'July' AND Year(BD.Date) = '2005', 1, 0)) AS
'July',
SUM(IF(MONTHNAME(BD.Date) = 'August' AND Year(BD.Date) = '2005', 1, 0)) AS
'August',
SUM(IF(MONTHNAME(BD.Date) = 'September' AND Year(BD.Date) = '2005', 1, 0))
AS 'September',
SUM(IF(MONTHNAME(BD.Date) = 'October' AND Year(BD.Date) = '2005', 1, 0)) AS
'October',
SUM(IF(MONTHNAME(BD.Date) = 'November' AND Year(BD.Date) = '2005', 1, 0)) AS
'November',
SUM(IF(MONTHNAME(BD.Date) = 'December' AND Year(BD.Date) = '2005', 1, 0)) AS
'December'
FROM Bookings B, Booking_Dates BD, Users U, Work_Types WT, Projects P
WHERE B.Booking_ID = BD.Booking_ID
AND B.User_ID = U.User_ID
AND B.Work_Type_ID = WT.Work_Type_ID
AND B.Project_ID = P.Project_ID
AND P.Project_ID = 32
AND P.Project_ID = WT.Project_ID
GROUP BY Name, B.Booking_Type, Work_Type WITH ROLLUP;
The problem with adding unavailability to the query is that it is not
related to a project but work types are, also i can't work out how to do
percentages in mysql, would be most grateful for your advice. Here are the
relevant tables:
mysql> DESC Bookings;
+---------------------------------------------+-------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key |
Default | Extra |
+---------------------------------------------+-------------+------+-----+---------------------+----------------+
| Booking_ID | int(11) | | PRI |
NULL | auto_increment |
| Booking_Type | varchar(15) | | |
Unavailability | |
| User_ID | int(11) | | | 0
| |
| Project_ID | int(11) | YES | |
NULL | |
| Rep_ID | int(11) | YES | |
NULL | |
| Practice_ID | int(11) | YES | |
NULL | |
| Booking_Creator_ID | int(11) | YES | |
NULL | |
| Booking_Creation_Date | datetime | YES | |
NULL | |
| Booking_Start_Date | datetime | | |
0000-00-00 00:00:00 | |
| Booking_End_Date | datetime | | |
0000-00-00 00:00:00 | |
| Booking_Completion_Date | date | YES | |
NULL | |
| Booking_Mileage | int(5) | YES | |
NULL | |
| Booking_Status | varchar(15) | | |
Other | |
| Unavailability_ID | int(2) | YES | |
NULL | |
| Task_ID | int(11) | YES | |
NULL | |
| Work_Type_ID | int(2) | YES | |
NULL | |
| Additional_Notes | text | YES | |
NULL | |
| Pre_Event_Copy_Received_By_Scheduling | char(3) | YES | |
NULL | |
| Post_Event_Original_Completed_Form_Received | char(3) | YES | |
NULL | |
| Section_C | char(3) | YES | |
NULL | |
| Date_Difference | varchar(20) | | |
n/a | |
| AU_Booking_ID | int(11) | YES | |
NULL | |
| Original_Booking_ID | int(11) | YES | |
NULL | |
+---------------------------------------------+-------------+------+-----+---------------------+----------------+
23 rows in set (0.00 sec)
mysql> DESC Projects;
+----------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra
|
+----------------------------+--------------+------+-----+---------+----------------+
| Project_ID | int(11) | | PRI | NULL |
auto_increment |
| Project_Name | varchar(100) | | | |
|
| Client_ID | int(11) | | | 0 |
|
| Rep_Viewable | char(3) | | | Yes |
|
| Administrator_ID | int(11) | YES | | NULL |
|
| Administrator_Phone_Number | varchar(20) | YES | | NULL |
|
| Project_Manager_ID_1 | int(11) | YES | | NULL |
|
| Project_Manager_ID_2 | int(11) | YES | | NULL |
|
+----------------------------+--------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
mysql> DESC Work_Types;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| Work_Type_ID | int(3) | | PRI | NULL | auto_increment |
| Project_ID | int(11) | YES | | NULL | |
| Day_Type | int(2) | YES | | NULL | |
| Work_Type | varchar(40) | | | | |
+--------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> DESC Unavailability_Descriptions;
+-----------------------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key |
Default | Extra |
+-----------------------------------------+--------------+------+-----+---------+-------+
| Unavailability_ID | int(11) | | PRI | 0
| |
| Unavailability_Description | varchar(100) | YES | | NULL
| |
| Unavailability_Description_Abbreviation | char(3) | | |
| |
+-----------------------------------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> DESC Booking_Dates;
+------------+---------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+------------+-------+
| Booking_ID | int(11) | | PRI | 0 | |
| Date | date | | PRI | 0000-00-00 | |
+------------+---------+------+-----+------------+-------+
2 rows in set (0.00 sec)
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]