Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Báo cáo chuyên cần trong MySql

Đây là một chặng đường dài sẽ hoạt động như mong đợi:

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

Đề xuất của tôi là tạo một dạng xem thực hiện câu lệnh if cho mỗi nhân viên theo cách đó mã của bạn sẽ dễ duy trì hơn. Xin lưu ý rằng đây là mã giả có thể cần một số thay đổi để chạy.

Hy vọng điều này sẽ hữu ích.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tính khả dụng cao với ngân sách hạn hẹp - Triển khai Cụm MySQL Galera tối thiểu hai nút

  2. 'PDOException' Lỗi cú pháp hoặc vi phạm quyền truy cập:1064 Bạn có lỗi trong cú pháp SQL của mình; kiểm tra

  3. chỉ định classpath cho jython độc lập

  4. Làm thế nào để tạo một khóa chính bắt đầu từ 1000?

  5. Truy vấn con so với tham gia