簡體   English   中英

SQL通過聯結表從其他表中選擇總和作為列

[英]SQL select sum from other table as a column via junction table

我有兩個常規表“ Tasks”和“ Employees”,還有一個聯結表EmployeeTasks簡化了,它們看起來像這樣

任務

  • 的TaskID
  • 專案編號
  • 持續時間

雇員

  • 員工ID
  • 員工姓名

EmployeeTasks

  • 員工ID
  • 的TaskID

我試圖找到一個基於通用項目ID的tsql查詢,該查詢將提供總花費時間和每個員工完成的任務數量的摘要。 與此類似:

"Employee" | "Number of Tasks" | "Time Spent"
----------------------------------------
John       |        5          |  123
Sam        |        4          |   72
SELECT E.EmployeeName, COUNT(T.TaskID) AS [Number of Tasks], SUM(T.Duration) as [Time Spent]
FROM Employee E, EmployeeTasks ET, Tasks T
WHERE ET.EmployeeID = E.EmployeeID AND ET.TaskID = T.TaskID
GROUP BY E.EmployeeName

嘗試這個:

 Select EmployeeName, 
      Count(et.TaskId) NumTasks,
      Sum(T.Duration) TimeSpent
  From Employees E
     Left Join (EmployeeTasks eT Join Tasks T 
                   On T.TaskId = eT.TaskId)
        On eT.EmployeeId = E.EmployeeId 
  Where ProjectId = @ProjectId
  Group By EmployeeName

這將適用於所有員工-項目組合

  Select EmployeeName, ProjectId, 
      Count(et.TaskId) NumTasks,
      Sum(T.Duration) TimeSpent
  From Employees E
     Left Join (EmployeeTasks eT Join Tasks T 
                   On T.TaskId = eT.TaskId)
        On eT.EmployeeId = E.EmployeeId 
  Group By EmployeeName, ProjectId

請注意,如果您需要為沒有任務的員工顯示時間,則這是不同的。

SELECT Count(TaskID) as NumOfTasks, Sum(Duration) as TimeSpent
FROM Employee 
INNER JOIN EmployeeTasks on Employee.EmployeeID = Tasks.EmployeeID
INNER JOIN Tasks on EmployeeTasks.TaskID = Tasks.TaskID
WHERE ProjectID = @ProjectID
GROUP BY EmployeeID

如果您想要員工姓名,則可以將其作為子選擇加入

SELECT EmployeeName, NumOfTasks, TimeSpent
FROM Employees 
INNER JOIN (insert select here) TaskSummary on Employees.EmployeeID = TaskSummary.EmployeeID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM