我们正在使用Microsoft Access数据库来跟踪正在进行的客户列表。每个客户都必须与多个部门签订合同 - 总共13个(!)部门 - 我们希望在发送和接收合同时跟踪每个客户的当前进度。这个结构看起来像这样:
Table 1
-------------------------------------------------------------------------------------------------------------------
CUSTOMER_ID | ... | DEP_A_SENT | DEP_A_RECEIVED | DEP_B_SENT | DEP_B_RECEIVED | DEP_C_SENT | DEP_C_RECEIVED | ... |
-------------------------------------------------------------------------------------------------------------------
1 | ... | 2015-05-01 | 2015-05-03 | 2015-05-04 | 2015-05-09 | 2015-05-01 | 2015-05-05 | ... |
2 | ... | 2015-05-01 | 2015-05-05 | 2015-05-01 | 2015-05-03 | 2015-05-13 | --- | ... |
...
DEP_X_SENT
与DEP_X_RECEIVED
之间的时间跨度(例如"部门A:2天,部门B:5天......& #34;对于客户ID 1)DEP_X_RECEIVED
日期:确定合同的第一个(MIN
)和最后一个(MAX
)日期在收到所有合同之前收到了每个客户需要多少天。 (例如"合同是在6天内收到的"对于客户ID 1,因为第一个是在5月3日收到的,而最后一个是在5月9日收到的)。此外,我想计算所有客户的平均时间跨度。如果尚未收到合同,则该字段中没有值。 在MySQL中,我可以使用GREATEST
和LEAST
等函数来比较不同列之间的值,但在Access中我现在必须依赖VBA,我认为这被认为是不好的做法。我如何通过相当简单的MAX
,MIN
和AVG
操作来规范化和重组我的表格以实现我的目标?非常感谢!
答案 0 :(得分:2)
只需将现有表格折叠为此结构:
{{1}}
现在,您可以简单地执行所需的分析,并将原始布局检索为从DEPARTMENT表到新TABLE_1的Pivot报告或LEFT OUTER JOIN。