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
它顯示此使用Sum聚合
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時需要ID列不顯着。
更新:這幾乎是我需要的。
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
'p.ProjectID = e.EmployeeID'有點可疑。首先,這意味着至多有一名員工可以參與項目。 – Andomar 2013-05-08 05:39:25
你是對的,所以我通過其他表來連接表。 – user2268697 2013-05-08 17:55:46