2013-04-04 78 views
0

我的兄弟帮我设计一个SQL字符串为我的Access 2007数据库确切的SQL查询字符串

SELECT Employee.EmpID, Employee.Name, Sum(DateDiff("s",Punches.LogIN,Punches.LogOUT)) AS THours 
FROM Punches INNER JOIN Employee ON Punches.EmpID=Employee.EmpID 
GROUP BY Employee.Name, Employee.EmpID; 

这个SQL字符串将两个表(员工,冲头)雇员的ID显示信息,名称,THours(总工作时数)

示例结果:

EmpID Name THours 
0001 Emp1 14560 
0003 Emp3  13 
0004 Emp4 43585 

我的问题是我想还显示,这并不在尚未累计工作时间的员工打表但已经在员工表中。

像这样

EmpID Name THours 
    0001 Emp1 14560 
    0002 Emp2  0 
    0003 Emp3  13 
    0004 Emp4 43585 

任何想法如何做到这一点?预先感谢您..

回答

2

您应该使用LEFT JOIN

SELECT Employee.EmpID, Employee.Name, Sum(NZ(DateDiff("s",Punches.LogIN,Punches.LogOUT),0)) AS THours 
FROM Employee 
LEFT JOIN Punches 
    ON Punches.EmpID=Employee.EmpID 
GROUP BY Employee.Name, Employee.EmpID 
ORDER BY Employee.EmpID; 
+0

TY ..其工作 – 2013-04-04 14:19:47

0
SELECT Employee.EmpID, Employee.Name, Sum(DateDiff("s",COALESCE(Punches.LogIN, 0),COALESCE(Punches.LogOUT, 0)) AS THours 
FROM Employee 
LEFT JOIN Punches 
ON Punches.EmpID=Employee.EmpID 
GROUP BY Employee.Name, Employee.EmpID; 
+0

谢谢您的时间先生...... – 2013-04-04 14:22:29