简体   繁体   English

SQL通过联结表从其他表中选择总和作为列

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

I have 2 regular Tables "Tasks" and "Employees" and one junction table EmployeeTasks simplified they look like this 我有两个常规表“ Tasks”和“ Employees”,还有一个联结表EmployeeTasks简化了,它们看起来像这样

Tasks 任务

  • TaskID 的TaskID
  • ProjectID 专案编号
  • Duration 持续时间

Employee 雇员

  • EmployeeID 员工ID
  • EmployeeName 员工姓名

EmployeeTasks EmployeeTasks

  • EmployeeID 员工ID
  • TaskID 的TaskID

I am trying to find a tsql query that based on a common project ID would deliver a summary of the total time spent and number of tasks done by each employee. 我试图找到一个基于通用项目ID的tsql查询,该查询将提供总花费时间和每个员工完成的任务数量的摘要。 Similar to this: 与此类似:

"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

try this: 尝试这个:

 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

and this will do it for all employees-Project combinations 这将适用于所有员工-项目组合

  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

Note this is different if you need to show time for an employee who has no tasks. 请注意,如果您需要为没有任务的员工显示时间,则这是不同的。

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

If you want the employee name you join this as a sub-select 如果您想要员工姓名,则可以将其作为子选择加入

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