查询缺席和现在的员工

时间:2013-06-11 05:24:56

标签: c# sql wpf c#-4.0 ms-access-2007

我有两张桌子员工和出勤,现在我想要缺席和现任员工的日期明智记录。

如: -

表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

5 个答案:

答案 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

SQL Fiddle Demo

答案 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";