Sql 如何在交叉表查询的多列中计算记录? 背景资料:
我的公司要求员工在一个职位上至少持有一份证书。员工总共可以获得17种不同的认证Sql 如何在交叉表查询的多列中计算记录? 背景资料:,sql,ms-access,crosstab,ms-access-2016,Sql,Ms Access,Crosstab,Ms Access 2016,我的公司要求员工在一个职位上至少持有一份证书。员工总共可以获得17种不同的认证 一名员工可以持有多个证书。但在任何一天,他们只能“坐”一个他们被认证的职位。大多数员工主要担任他们持有证书的最高级别职位,但如果该职位人员短缺,并且他们持有特定证书,则可以担任较低级别的职位(有些员工持有较高级别的证书,但没有较低级别的证书,因为他们让证书过期) 多个员工可以持有同一证书 大约90%的员工是合同员工,这意味着他们有一个固定的终止日期。合同可以延长,但是为了这个Access数据库和要生成的报告,我们假设
拥有员工1
、职位1
和职位2
的证书,但他主要担任职位3
,合同于2020年6月到期职位3
拥有员工2
和职位1
的证书,但主要担任职位2
,其合同将于2022年2月到期职位2
是新员工,于2019年8月抵达,正在接受培训以获得员工3
,初始证书的最长允许培训时间为3个月,因此他大概应在2019年12月之前获得职位1
证书,其合同将于2025年8月到期职位1
+-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|证书| 11月19日| 12月19日| 1月20日| 2月20日| 3月20日| 4月20日| 5月20日| 6月20日| 7月20日| 8月20日| 9月20日| 10月20日|
+-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|位置1 | 2 | 3 | 3 | 3 | 3 | 2 | 2 | 2|
|位置2 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 1 | 1|
|位置3 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0|
+-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
初级证书表
+-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|证书| 11月19日| 12月19日| 1月20日| 2月20日| 3月20日| 4月20日| 5月20日| 6月20日| 7月20日| 8月20日| 9月20日| 10月20日|
+-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|位置1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1|
|位置2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1|
|位置3 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0|
+-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
现在我已经有了一个解决方案,但它效率极低,并且涉及到每个单元格的查询(生成报告时,2个图表X 12个月X 17个位置=408个查询)。我希望通过交叉表查询做一些更有效率的事情
表的设置如下(仅列出相关字段):
Emp_表
(自动编号)ID
(日期)合同开始
(日期)合同结束
(自动编号)ID
(num,多个->与certID
)cert\u table.ID的一个关系
(num,多个->与EmpID
)Emp\u table.ID的一个关系
(日期)收到证书的日期
(是/否)主要
(自动编号)ID
(短文本)证书名称
内部连接
,以便将所有内容整合在一起,我尝试使用中的格式进行交叉表查询,但它只会将单个证书添加到员工收到证书的月份年份的计数中,而不会添加到员工持有证书的每个月
所以我的问题是:
在SQL或VBA中,有没有一种方法可以根据员工收到证书的时间以及他们的合同计划何时终止来获取跨多个列(月-年)计数的证书?据我所知,获取交叉表查询的主要问题是,它只能生成包含您已有数据的列 获取月度列的一个简单解决方案是,有一个包含12个日期的边表,然后使用笛卡尔积为每个列生成月度数据