SELECT s.EmployeeID,e.LastName,projectID,sum(s.HoursWorked) AS Total_Hours
from TimeSheet s
full join Employee e ON e.EmployeeID = s.EmployeeID
full Join Project p
ON p.ProjectID = e.EmployeeID
group by p.ProjectID,s.EmployeeID,e.LastName
显示此内容
Employeid Lastname projectID Sum(hoursWorked)
4 Peacock NULL 33.00
5 Buchanan NULL 44.00
1 Davolio 1 56.00
2 Fuller 2 41.00
3 Leverling 3 42.00
我希望项目ID显示为2 NULLS。
更新:这几乎是我所需要的。
SELECT COALESCE(et.EmployeeID, p.projectID) AS employeeID
, e.LastName
, COALESCE(p.projectID, et.EmployeeID) AS projectID
, sum(s.HoursWorked) AS Total_Hours
from TimeSheet s
inner join Employee e ON e.EmployeeID = s.EmployeeID
inner join EmployeeTask et on e.EmployeeID = et.EmployeeID
inner join Task t On t.TaskID=et.TaskID
inner join Project p on p.ProjectID=t.ProjectID
group by p.ProjectID, et.EmployeeID, e.LastName
这会产生
Employeid Lastname projectID Sum(hoursWorked)
1 Davolio 1 112.00
2 Fuller 1 82.00
3 Leverling 2 84.00
4 Peacock 2 66.00
5 Buchanan 3 88.00
请告诉我这个链接Using multiple JOINS. SUM() producing wrong value
更新答案:然后我重写了我的sql以获得正确的答案。
SELECT COALESCE(et.EmployeeID, p.projectID) AS employeeID
, COALESCE(p.projectID, et.EmployeeID) AS projectID
, e.LastName
, (Select sum(HoursWorked)
FROm TimeSheet
WHere TimeSheet.EmployeeID=e.EmployeeID
)AS Total_Hours
from TimeSheet s
inner join Employee e ON e.EmployeeID = s.EmployeeID
inner join EmployeeTask et on e.EmployeeID = et.EmployeeID
inner join Task t On t.TaskID=et.TaskID
inner join Project p on p.ProjectID=t.ProjectID
group by p.ProjectID, et.EmployeeID, s.EmployeeID,e.EmployeeID, e.LastName
答案 0 :(得分:3)
SELECT COALESCE(s.EmployeeID, projectID) AS employeeID
, e.LastName
, COALESCE(projectID, s.EmployeeID) AS projectID
, sum(s.HoursWorked) AS Total_Hours
from TimeSheet s
full join Employee e ON e.EmployeeID = s.EmployeeID
full Join Project p ON p.ProjectID = e.EmployeeID
group by p.ProjectID, s.EmployeeID, e.LastName
因为你的projectid等于employee id,那么如果join为ProjectID返回null,我们可以使用employeeid代替
答案 1 :(得分:2)
NULLs值表示这2名员工没有任何项目。换句话说,没有id为4,5的项目
答案 2 :(得分:0)
从您的数据库结构中,我假设一名员工正在为一个项目工作,而所有时间表仅注册该项目。我个人认为这不是一个很好的数据库设置。它可能不会用于在实际项目中存储实际数据。