我有一个简单的PHP网络应用程序,用于每日出席empployee
我有一个名为emp_master
的表,它将拥有所有员工数据
例如
emp_id emp_name
1001 Abby
1002 Buub
另一个名为timesheet_tran
的表,甚至在员工登录系统时都有dailt事务
timesheet_tran table
date emp_id
02/01/14 1001
02/01/14 1002
03/01/14 1001
04/01/14 1001
04/01/14 1002
我试图找出一个返回数据的查询,在日期范围之间显示所有在日期范围之间记录/未记录的员工。
我需要显示
emp_id date absent/present
1001 02/01/14 present
1002 02/01/14 present
1001 03/01/14 present
1002 03/01/14 absent
我试过
SELECT m.emp_id,t.date FROM timesheet_tran as t RIGHT OUTER JOIN emp_master m ON t.date BETWEEN '02/01/14' AND '04/01/14' AND t.emp_id = m.emp_id
但我需要提到每个日期的记录。
答案 0 :(得分:1)
SELECT m.emp_id,t.date
FROM timesheet_tran as t
RIGHT OUTER JOIN emp_master m ON t.date
AND t.date BETWEEN '2014-02-01' AND '2014-04-01'
AND t.emp_id = m.emp_id
编辑:根据您更新的评论,您需要以列出的方式查询所有用户的联接,无论他们是否存在。
SELECT m.emp_id,t.date
FROM emp_master as m
LEFT JOIN timesheet_tran t ON date
这将列出所有用户条目。如果时间表数据不存在,则返回null。然后,您可以根据需要将其转换为字符串缺席/存在。
SELECT m.emp_id,
CASE WHEN t.date IS NOT NULL
THEN 'present'
ELSE 'absent'
END AS T_date
FROM emp_master as m
LEFT JOIN timesheet_tran t ON date
答案 1 :(得分:1)
尝试这样
Select emp_id,emp_name,Date1,(
CASE WHEN EXISTS(
sELECT emp_id FROM timesheet_tran AT WHERE T.emp_id =AT.emp_id AND T.date1=AT.date
) then 'Present' Else 'Absent' End )as Status
FROM
(
Select emp_id ,emp_name,Cast(date as DATE)AS DATE1 from emp_master a,(Select Distinct date from timesheet_tran ) b
) T
希望这能帮到你