2013-05-08 63 views
0
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 
+0

'p.ProjectID = e.EmployeeID'有點可疑。首先,這意味着至多有一名員工可以參與項目。 – Andomar 2013-05-08 05:39:25

+0

你是對的,所以我通過其他表來連接表。 – user2268697 2013-05-08 17:55:46

回答

2

NULLs值表示這2名員工沒有任何項目。通過換句話說,不存在有項目編號4,5

3

u可以使用此查詢:因爲你的專案編號等於員工ID

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 

,然後如果連接返回NULL的專案編號我們可以使用employeeid而不是

+0

這給了projectID 4和5,並且沒有任何具有該值的projectID。員工編號1和2是項目編號1,員工編號2和3是項目編號2,員工編號3是項目編號3 – user2268697 2013-05-08 17:17:48

+0

這使我獲得了大部分的方式,仍然存在ProjectID和employeeID之間的單一連接問題,我解決了。 – user2268697 2013-05-08 17:56:39

0

從您的數據庫結構中,我假定一個員工正在爲一個項目工作,並且所有時間表僅爲該項目註冊。我個人認爲這不是一個好的數據庫設置。它可能不會用於在實際項目中存儲實際數據。