我有两张桌子员工和出勤,现在我想要缺席和现任员工的日期明智记录。
如: -
表1:员工(EmpId,姓名)
表2:出勤率(Empid,CheckInOutDateTime,状态(如--I / O))
(当员工在考勤表中缺席但需要记录时,记录将不可用)
现在我想要输出:
**EmpID Name Date Status**
1 Emp1 06/11/2013 Persant
2 Emp2 06/11/2013 Absant
3 Emp3 06/11/2013 Persant
1 Emp1 06/12/2013 Persant
2 Emp2 06/12/2013 absant
3 Emp3 06/12/2013 absant
答案 0 :(得分:1)
试试这个......
Select Empid,EmpName,Date1,(
cASE WHEN EXISTS(
SELECT EMPID FROM Atten AT WHERE T.EMPID=AT.EMPID AND T.date1=AT.Chechout
) then 'Present' Else 'Absent' End )as Status
FROM
(
Select Empid,EmpName,Cast(Chechout as DATE)AS DATE1 from Emp a,(Select Distinct Chechout from Atten) b
) T
ms访问中的- :
Select Empid,EmpName,Date1,(iif((SELECT Count(Empid)FROM Atten AT WHERE T.EMPID=AT.EMPID AND T.date1=DateVAlue(AT.Chechout))>0,'Absent','Present')) as Status
FROM(
Select Empid,EmpName,DateVAlue(Chechout) AS DATE1 from Emp a,(Select Distinct DateValue(Chechout) as Chechout from Atten) b
)T
答案 1 :(得分:0)
你可以试试这个:
SELECT A.EmpId,A.Name,B.CheckInOutDateTime,status = CASE WHEN B.STATUS = 'IN' THEN 'PRESENT' ELSE 'ABSENT' END from Table1 A join Table2 B ON A.Empid=B.empid
答案 2 :(得分:0)
您要查找的SQL功能称为outer join。您可能还想阅读其他SQL功能。
如果由于某种原因你不能使用外部联接,你可以使用一个子选择并计算考勤表中的记录,因为你只对一个布尔值感兴趣,在某一天有或没有(计数> 0,员工在场,计数= 0,员工缺席。
答案 3 :(得分:0)
我可能会写一个花哨的查询来获得你想要的结果,但它也需要一个包含每个可能日期的第3个表。
我认为在每天结束时安排添加缺席记录的计划任务会更容易。或者你可以提前让每个人都缺席,然后在员工出现时将记录改为现在。
答案 4 :(得分:0)
这是伪代码:
for each date as varDate
query = "SELECT COUNT(*) AS cnt FROM Employee te LEFT JOIN Attendance ta ON te.Empid = ta.Empid WHERE ta.CheckInOutDateTime = " + varDate.ToString() + " GROUP BY te.Empid";
在显示上述查询的结果时,您可以执行以下操作:
if Convert.ToInt32(dataRow("cnt")) > 0
status = "Present";
else
status = "Absent";