【发布时间】:2018-06-13 15:57:39
【问题描述】:
我在尝试对查询中的记录进行分组时遇到问题。
我需要的是 - 在我从组合框中选择 DatePeriod 之后 - 在基础子表单中计算每个员工在选定日期期间的记录数。
概览
注意:为简单起见,我只使用了两个字段。
主窗体有 TabControl。每个选项卡都有一个子表单(来源:查询)。查询中的每条记录都有日期 (V_LOCATION_VISIT_DATE) 和员工 (V_WORKER) 字段。每个V_WORKER 都有数百个条目(链接到Oracle db)。
在我有 cboDatePeriod 的表单上(例如:„16.05.2018-15.06.2018“)。
从 cboDatePeriod 中选择一个值后,代码将 DatePeriod 与查询中的日期进行比较并过滤它。
一个查询对 qryEmployees 进行了 INNER JOIN,因为我想计算特定员工的记录。
表 DATA 中的条目示例:
|V_WORKER | V_LOCATION_VISIT_DATE
| David Sylvian | 08.01.2018 14:38:21
| David Sylvian | 08.01.2018 15:31:48
| David Sylvian | 08.01.2018 16:22:07
| Brian Eno | 08.01.2018 17:33:07
| Brian Eno | 09.01.2018 16:18:50
| Brian Eno | 09.01.2018 17:09:21
无日期代码:
SELECT qryDATA.V_WORKER,Count(qryDATA.V_WORKER) AS CountOfV_WORKER
FROM qryEmployeesCZS DATA ON qryEmployeesCZS.FullName = qryDATA.V_WORKER
GROUP BY qryDATA.V_WORKER
HAVING (((qryDATA.V_WORKER)<>""));
查询结果示例:
|V_WORKER | CountOfV_WORKER
| David Sylvian | 821
| Brian Eno | 92
在应用 DatePeriod 过滤器之后应该是这样的。让我们继续吧。
包含日期的代码:
使用包含日期的 int 函数来删除时间戳)而不是为每个员工提供一条记录我为每个员工有许多记录,其中每条记录是一天的记录计数(按 V_WORKER 和 DAY 分组)。
SELECT qryDATA.V_WORKER, Int([qryDATA].[V_LOCATION_VISIT_DATE]) AS V_LOCATION_VISIT_DATE,
Count(qryDATA.V_WORKER) AS CountOfV_WORKER
FROM DATA
INNER JOIN qryEmployeesCZS ON qryDATA.V_WORKER = qryEmployeesCZS.[FullName]
GROUP BY qryDATA.V_WORKER,Int([DATA].[V_LOCATION_VISIT_DATE])
HAVING (((qryDATA.V_WORKER)<>""));
查询结果示例(我使用int函数去除时间戳):
| V_WORKER | V_LOCATION_VISIT_DATE | CountOfV_WORKER
| David Sylvian | 08.01.2018 | 4
| David Sylvian | 09.01.2018 | 6
| David Sylvian | 10.01.2018 | 2
| Brian Eno | 11.01.2018 | 4
| Brian Eno | 12.01.2018 | 2
| Brian Eno | 15.01.2018 | 5
| Brian Eno | 16.01.2018 | 3
我想要什么:
从组合框中选择日期期间后,我想计算按 V_WORKER 分组的记录 - 它应该如下所示:
| V_WORKER- | CountOfV_WORKER
| David Sylvian | 26
| Brian Eno | 17
我尝试在子表单中使用文本框来计算记录,但它当然会计算所有记录,而不是按员工分组。
我正在考虑(在绝望的时刻)在一个子表单中有两个查询:queryOne 将包含所有带有日期且没有分组的记录,第二个(来源:queryOne)将删除 Date 字段和分组包括在内。
有什么想法吗?
【问题讨论】:
-
为什么不直接统计EmployeeName字段呢?在不知道您的数据结构的情况下,我可能会遗漏一些东西。