2014-03-03 46 views
-1

我正在努力显示上一周没有进入任何小时的员工。我目前正在使用三张桌子。一个表格是每周有第一个日期的日历。星期的格式是星期日到星期六。第二个表格是输入的小时数列表。时间表包含输入时间的日期和员工姓名。第三张表是所有雇员的名单。我似乎无法得到联合工作,我希望他们如何工作。最终结果我希望看到鲍勃在第7周和第8周进入时间,但第9周为空。感谢您的帮助。非常感谢。显示基于三个表的空值

目前代码

SELECT 
    d.Resource 
    ,SUM(p.Hours) AS Hours 
    ,m.[WeeksSundayToSaturday] 
    ,DatePart(wk, m.[WeeksSundayToSaturday]) AS WeekNumber 

FROM CalendarWeeks m 

LEFT JOIN [TimeTracking] p ON 
(m.[WeeksSundayToSaturday] BETWEEN p.Date AND p.Date + 7) 

RIGHT JOIN [DepartmentMembers] d ON 
d.Resource = p.CreatedBy 


GROUP BY 
d.Resource 
,m.WeeksSundayToSaturday 

数据表

Department Members  
Name Department 
Bob  Engineer  
Sue  HR 
John Operations 

Time Tracking  
Resource Hours Date 
Bob   13  2/9/2014 
Sue   12  2/10/2014 
John  2  2/11/2014 
Bob   6  2/12/2014 
Bob   8  2/13/2014 
John  8  2/14/2014 
John  8  2/15/2014 
Bob   8  2/16/2014 
Bob   1  2/17/2014 
Bob   2  2/18/2014 
Bob   1  2/19/2014 
Bob   8  2/20/2014 
Bob   9  2/21/2014 
Bob   6  2/22/2014 
Sue   8  2/23/2014 
John  2  2/24/2014 

Calendar   
WeeksSundayToSaturday  
1/5/2014   
1/12/2014  
1/19/2014  
1/26/2014  
2/2/2014   
2/9/2014   
2/16/2014  
2/23/2014  
3/2/2014   
3/9/2014   
3/16/2014  
3/23/2014  
3/30/2014  

所需的结果

Bob 
    Week 7 = 27 
    Week 8 = 35 
    Week 9 = NULL 
+0

尝试做外部联接在时间跟踪表:LEFT OUTER JOIN [时间跟踪] P于 – Koshera

回答

0

你上面的查询是给编译错误,请尝试以下查询,我认为它会帮助你

SELECT d.Resource ,SUM(p.Hours)AS小时 ,米。[WeeksSundayToSaturday] ,日期部分(WK,米。[WeeksSundayToSaturday])AS WeekNumber

FROM CalendarWeeks中号

LEFT JOIN [时间跟踪] p ON(p.Date BETWEEN 米。[WeeksSundayToSaturday] AND DATEADD(d,6,M。[WeeksSundayToSaturday])

RIGHT JOIN [DepartmentMembers] d ON d.Resource = p.CreatedBy

GROUP BY d.Resource,m.WeeksSundayToSaturday