Mysql yee.emp_id and date=('01-12-2011')求和值以确保一个值,并且由于每个emp只有一个日期条目,所以它应该是准确的值。由于您必须处理一个月的天数,并且视图要求每个员工加入后的每一天都有一个条目,因此我建议您创建一个包含一年天数的

Mysql yee.emp_id and date=('01-12-2011')求和值以确保一个值,并且由于每个emp只有一个日期条目,所以它应该是准确的值。由于您必须处理一个月的天数,并且视图要求每个员工加入后的每一天都有一个条目,因此我建议您创建一个包含一年天数的,mysql,date,join,case,Mysql,Date,Join,Case,yee.emp_id and date=('01-12-2011')求和值以确保一个值,并且由于每个emp只有一个日期条目,所以它应该是准确的值。由于您必须处理一个月的天数,并且视图要求每个员工加入后的每一天都有一个条目,因此我建议您创建一个包含一年天数的表(您需要决定如何处理闰年)。然后,您可以通过将视图与日期表合并来创建视图,为一年中的每一天创建一个条目。是的,我正在尝试执行您的逻辑,我将在短时间内回复您。感谢您的回复。我非常感谢您的努力。您知道,如果我有数千名员工,那么根据您的查询,我们需


yee.emp_id and date=('01-12-2011')求和值以确保一个值,并且由于每个emp只有一个日期条目,所以它应该是准确的值。由于您必须处理一个月的天数,并且视图要求每个员工加入后的每一天都有一个条目,因此我建议您创建一个包含一年天数的表(您需要决定如何处理闰年)。然后,您可以通过将视图与日期表合并来创建视图,为一年中的每一天创建一个条目。是的,我正在尝试执行您的逻辑,我将在短时间内回复您。感谢您的回复。我非常感谢您的努力。您知道,如果我有数千名员工,那么根据您的查询,我们需要为每个e分别编写1000个视图员工。由于每位员工的加入日期不同。这是对的吗?还是我考虑的方式不对?@PravinGate:您只需编写一个视图,但需要正确编写。该视图应具有
emp_id、日期(加入emp后的每一天)、值(确定是否为0,1,2,3,4)
然后您应该能够
选择sum(值)从emp_id=employee.emp_id和日期=('01-12-2011'的视图)
求和值以确保一个值,因为每个emp只有一个日期条目,所以它应该是准确的值。因为您必须处理一个月的天数,并且视图要求每个员工加入后的每一天都有一个条目,我建议您创建一个保存一年中天数的表(您需要决定如何处理闰年)。然后,您可以通过将视图与日期表合并来创建视图,为一年中的每一天创建一个条目。
Employee Table with Columns

    emp_id  emp_Name   Joining_Date
     1      john         11-01-2012
     2      Scott        12-01-2012


Holiday Table

Holiday_Name         Date 
Chrismas          25-12-2012  
Dushera           08-03-2012
Independance Day  15-08-2012

Leave Table

Subject  from_Date     to_Date      Emp_Id     status 
PL       02-01-2012    04-01-2012      1       Approved
CL       11-01-2012    12-01-2012      2       Declined      


Doctor Table

Subject   Call_Date    call_Done_By(emp_id)
 Call     15-01-2012      1
 CA       21-02-2012      2

Chemist Table
Subject   Call_Date    call_Done_By(emp_id)
Chemist   1-02-2012     2
Texo      21-03-2012    1
Employee   year  Month    1  2   3   4   5   6    7.... 
 John      2011   Nov     Y  Y   Y   Y   Y   L    S....
 Scott     2011   Nov     Y  Y   L   M   Y   L    S
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