SQL创建日志

时间:2012-11-19 13:25:04

标签: sql ms-access

我正在尝试创建一个查询,告诉我每个人每个任务的小时数。

我有以下表格:

  • 包含列的日志表: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;

然而,这给了我一个独特的人 - 任务组合列表,但是该任务的总花费时间而不是每人花在该任务上的总时数。

希望我已经清楚地解释了这个问题,以便你可以帮助我。

非常感谢提前。

2 个答案:

答案 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)

您还需要加入回复会员表。在您发布的示例中,您只加入了日志和任务表。

如果您提供了有关会员表中的内容的更多信息,我们乐意为您提供协助。