我正在尝试创建一个查询,告诉我每个人每个任务的小时数。
我有以下表格:
最终日志看起来应该是这样的:
| 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;
然而,这给了我一个独特的人 - 任务组合列表,但是该任务的总花费时间而不是每人花在该任务上的总时数。
希望我已经清楚地解释了这个问题,以便你可以帮助我。
非常感谢提前。
答案 0 :(得分:3)
您可以在Member table
条款中加入where
。
因此,如果您的Log table
还包含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
这可以为您提供所需的结果。
编辑:
如果您确实想使用显式连接而不是隐含连接,那么Query将读取如下内容: -
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
我通常使用显式连接,因为我的查询相当大,我发现显式连接更容易阅读。至于效率和其他因素,我不确定。
答案 1 :(得分:1)
您还需要加入回复会员表。在您发布的示例中,您只加入了日志和任务表。
如果您提供了有关会员表中的内容的更多信息,我们乐意为您提供协助。