[英]SQL query for searching the dates
我編寫了一個SQL查詢,在查詢員工ATTENDANCE表中查找缺席的人員。 但是,我怎樣才能顯示我所說的缺席期的日期? 除日期外它工作正常。 我想表明那個缺席時期的那一天是什么時候? 我無法顯示日期。
樣品:
BadgeNumber - EmployeeName - Absent Date
10042 - Mr. Erik - 2014-07-01
碼:
SELECT SMEmployee.BadgeNumber,SMEmployee.EmployeeFullName,SMDepartment.DepartmentName
FROM SMEmployee
LEFT OUTER JOIN SMDepartment
ON SMDepartment.DepartmentID=SMEmployee.DepartmentID
WHERE EmployeeID NOT IN (
SELECT empCheckInOut.USERID
FROM empCheckInOut
WHERE convert(date,CHECKTIME)='2014-07-01')
您似乎在'empCheckInOut'表中捕獲員工所在的日期。
您需要構建臨時表,其中包含1個月的所有日期,然后減去'empCheckInOut'表中捕獲的日期。
例如#temp將有06-01-2014,06-02-2014,06-03-2014,...(6月的所有30天)
CheckInOut將於06-01-2014,06-03-2014,...(emp在6月2日缺席,因此在這里捕獲的總共29天)
然后,從另一個中減去一個,您將獲得員工缺席的日期。
通常要檢查記錄是否存在(正如你在這里注意的那樣,檢查員工沒有在一天檢入/退出),使用LEFT OUTER JOIN和檢查NULL是否更有效率WHERE子句中的字段(即,沒有找到行的LEFT JOIN)。
但是這也不會給你日期。
我認為你想要檢查選擇的日期,這需要了解他們缺席的日期。
因此,可以使用一系列聯合簡單查詢來獲取日期,將CROSS JOIN連接到您的employee表,並將LEFT JOIN連接到empCheckInOut表。 這樣你就可以把日期搞定了。
SELECT SMEmployee.BadgeNumber,SMEmployee.EmployeeFullName,SMDepartment.DepartmentName, subDate.aDate
FROM SMEmployee
CROSS JOIN (SELECT '2014-07-01' AS aDate UNION SELECT '2014-06-30') subDate
LEFT OUTER JOIN SMDepartment
ON SMDepartment.DepartmentID=SMEmployee.DepartmentID
LEFT OUTER JOIN empCheckInOut
ON SMEmployee.EmployeeID = empCheckInOut.USERID
AND convert(date,CHECKTIME) = subDate.aDate
WHERE empCheckInOut.USERID IS NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.