我正在尝试创建一个查询,以记录每人每项任务花费的时间。
我有下表:
- 包含以下列的日志表:TaskID、PersonID、Hours
- 成员表,包含以下列:ID、姓名、电子邮件、Skype、备注
最终日志应该如下所示:
| Person1 | Task1 | x hours |
| Person1 | Task2 | x hours |
| Person2 | Task1 | x hours |
因此必须按人员和任务进行分组。
总时间给我带来了麻烦。
到目前为止,这就是我所拥有的:
SELECT m.Name, t.Task, Sum(l.Hours) AS TotalHours
FROM Member AS m, Log AS l, Tasks AS t
WHERE t.TaskID=l.TaskID
GROUP BY t.Task, m.Name;
但是,这为我提供了一个独特的人员-任务组合列表,但包含在该任务上花费的总小时数,而不是每个人在该任务上花费的总小时数。
希望我已经足够清楚地解释了问题,以便您可以帮助我。
提前非常感谢。
最佳答案
您可以在 where
子句中包含您的成员表
。
因此,如果您的日志表
还包含MemberId
,您的Sql查询将读取:-
Select m.Name, t.Task, Sum(l.Hours) As TotalHours
From Member AS m, Log AS l, Tasks AS t
WHERE t.TaskID=l.TaskID and m.MemberId=l.MemberId
GROUP BY t.Task, m.Name
这应该会为您提供所需的结果。
编辑:
如果您确实想使用显式连接而不是隐式连接,那么查询将显示如下内容:-
Select m.Name, t.Task, Sum(l.Hours) As TotalHours
From Log AS l
Inner join tasks AS t
On t.TaskID=l.TaskID
Inner join Member AS m
On m.MemberId=l.MemberId
GROUP BY t.Task, m.Name
我通常使用显式联接,因为我的查询相当大,并且我发现显式联接更易于阅读。至于效率和其他因素,我不确定。
关于SQL 创建日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13454737/