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