2

我正在尝试创建一个查询,让我记录每人每项任务花费的小时数。

我有以下表格:

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

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

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

提前谢谢了。

4

2 回答 2

3

您可以Member tablewhere子句中包含您的内容。

因此,如果您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

这应该会给你你需要的结果。

编辑 :

如果您确实想使用显式而不是隐式连接,那么查询将显示如下内容:-

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

我通常使用显式连接,因为我的查询要大得多,而且我发现显式连接更容易阅读。至于效率和其他因素,我不确定。

于 2012-11-19T13:55:03.390 回答
1

您还需要重新加入您的会员表。在您发布的示例中,您仅加入日志和任务表。

如果您提供有关成员表中内容的更多信息,我很乐意提供帮助。

于 2012-11-19T13:30:00.207 回答