2014-01-11 74 views
0

我有empployee 的日常出勤一個簡單的PHP的Web應用程序,我已經將擁有所有例如SQL - 日期範圍返回所有數據

emp_id emp_name 
1001  Abby 
1002  Buub 

員工數據 並命名爲另一個表名爲emp_mastertimesheet_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

一些事情就像我對PHP中的循環(從至今){執行查詢每個日期單獨} – epynic

回答

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 

SQL FIDDLE DEMO

希望這有助於你

+0

老兄,,,你真棒,請你建議一些好方法來學習如何寫這種查詢。這工作得很好:D – epynic

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 
+0

這是我上面提到的相同嗎? – epynic

+0

不,請注意第4行的'AND t.date' – crafter

+0

另外,請小心默認的mysql日期格式:請參閱此處以進行討論。 http://stackoverflow.com/questions/5367721/mysql-date-format – crafter