sql >> Database >  >> RDS >> Mysql

Aanwezigheidsrapport in MySql

Hier is een lange weg die zou moeten werken zoals verwacht:

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

Mijn suggestie is om een ​​weergave te maken die de if-verklaring voor elke werknemer doet, zodat uw code gemakkelijker te onderhouden is. Houd er rekening mee dat dit pseudo-code is die misschien wat moet worden gewijzigd om te worden uitgevoerd.

Ik hoop dat dit helpt.




  1. Dubbele gegevensproblemen en hoe ze op te lossen

  2. Schakel het SA-account in SQL Server uit (T-SQL-voorbeeld)

  3. OracleException (0x80004005) bij verbinding met Oracle Database

  4. GROUP BY in Postgres - geen gelijkheid voor JSON-gegevenstype?