连接表以获取总和 - SQL/Access

Posted

技术标签:

【中文标题】连接表以获取总和 - SQL/Access【英文标题】:Joining Tables to Get Sums - SQL/Access 【发布时间】:2015-11-24 18:03:18 【问题描述】:

我正在为我们的呼叫中心创建一个 Access 数据库。现在有四个表:

MASTERTABLE:DisplayName、CLOCKid(PrimaryKey)、PHONEid

ROSTERTABLE: CLOCKid (ForeignKey), StartDate, EndDate

电话日志:PHONEid、DateStamp、StatusHours

TIMECLOCK:CLOCKid、DateStamp、HoursByDay

Mastertable 为每个唯一员工提供一行。它包含每个员工的各种 ID/用户名,用于上面列出的内容和其他项目。 Rostertable 包含每个员工职位的一行——随着时间的推移,员工可以有多个职位,由 StartDate 和 EndDate 指示,因此是多行。这样我们就可以保留可以查询的历史记录。 PhoneLog 是从我们的电话系统输入的。每个用户有多条线路,代表每个电话状态用户在该状态中花费的时间。 TimeClock 类似;员工每天工作一排。

我需要在 Microsoft Access 2013 中创建一个查询,最好使用 SQL,这将为我提供每个人在其花名册开始/结束时间内的 TimeClock 小时数的总和,以及他们的电话小时数。因此,生成的查询将列出 RosterTable 中的每个员工、他们的电话时间总和以及他们的付费时间总和。

希望这是有道理的。如果有人有问题/需要澄清,请告诉我。

【问题讨论】:

示例数据?你试过什么了?这里的大多数用户不会为您编写代码,但很乐意找出您的尝试有什么问题。 请阅读How to askHow to create a Minimal, Complete, and Verifiable example.这是一个很好的起点spaghettidba.com/2015/04/24/… 【参考方案1】:
SELECT MT.DisplayName, Sum(PL.StatusHours) as PhoneHours, Sum(TC.HoursByDay) as PaidTime
FROM MASTERTABLE MT
INNER JOIN ROSTERTABLE RT
  ON MT.ClockID = RT.ClockID
LEFT JOIN PHONELOG PL
  ON MT.PhoneID = PL.PhoneID
LEFT JOIN TIMECLOCK TC
  ON MT.ClockID = TC.ClockID
WHERE RT.StartDate >= YourStartDate
  AND RT.EndDate =< YourEndDate

您只需要定义 YourStartDate 和 YourEndDate,它们可以是表单上的文本框或查询中的输入框,甚至是从另一个表内部连接的。

【讨论】:

以上是关于连接表以获取总和 - SQL/Access的主要内容,如果未能解决你的问题,请参考以下文章

连接两个表以匹配整数以获取用户名

连接两个表以获取确切日期

Laravel 连接表以获取每个表的属性

如何连接两个表以在视图中获取输出

如何连接表以选择连接表中的最大行? [复制]

获取内部连接表中两行的总和