Attendance Report in MySql

前端 未结 1 420
灰色年华
灰色年华 2021-01-23 11:45

I want to write a query to generate attendance report of employee. First I will tell you how the presence of employee is stored in my database.

I have following tables.<

相关标签:
1条回答
  • 2021-01-23 11:59

    Here is a long way that should work as expected:

    SELECT
        Employee.emp_Name,
        '2011' AS `Year`,
        'Dec' AS `Month`,
        CASE (
            IF(
                DATE('1-12-2011') < DATE(Employee.Joining_Date)),
                '0' --Not joined yet
                IF (
                    (SELECT COUNT(*) FROM Holiday WHERE DATE('1-12-2011') = DATE(Holiday.date)) = 1,
                    '1', --National Holiday
                    IF (
                        (SELECT COUNT(*) FROM Leave WHERE DATE('1-12-2011') > DATE(Leave.to_Date) AND DATE('1-12-2011') < DATE(Leave.from_Date) AND Leave.Emp_Id = Employee.emp_id) = 1,
                        '2', --On Leave
                        IF(
                            (SELECT COUNT(*) FROM Doctor WHERE DATE('1-12-2011') > DATE(Doctor.Call_Date) AND Doctor.call_Done_By = Employee.emp_id) = 1 OR 
                            (SELECT COUNT(*) FROM Chemist WHERE DATE('1-12-2011') > DATE(Chemist.Call_Date) AND Chemist.call_Done_By = Employee.emp_id) = 1,
                            '3' --Visit Doctor or Chemist
                            '4' --Employee was at work
                        )
                    )
                )
            )
        )
            WHEN 0 THEN 'N/A' --Not joined yet
            WHEN 1 THEN 'L' --National Holiday
            WHEN 2 THEN 'L' --On Leave
            WHEN 3 THEN 'S' --Visit Doctor or Chemist
            ELSE 'Y' --Employee was at work
        END AS `1`, --first day of month
        ... AS `2`, --repeat for second day of the month till max day of current month replace '1-12-2011' with each different day of month
        ...
        ... AS `30`
    FROM
        Employee
    

    My suggestion is to create a view that does the if statement for each employee that way your code will be easier to maintain. Please keep in mind that this is pseudo code that might need some some changing to run.

    Hope this helps.

    0 讨论(0)
提交回复
热议问题