我有一个旧数据库,用于跟踪员工参加培训活动的情况。每条记录都是一名员工,并且遵循基本的名字/姓氏电话号码等...大约有150个字段代表过去的事件,每个字段都有一个是/否复选框,表明该员工是否参加了该事件。
我有一个表格,可以轻松查看和编辑员工记录。我目前有一个大量的事件列表,其复选框与主表中的相应字段相关联。
我需要创建当前正在查看的员工参加的事件列表,以便显示为指定员工检查的所有字段名称。
我知道我正在使用的数据库的设计显然是不完美的,但有什么方法可以做到这一点?
提前致谢!
答案 0 :(得分:2)
你基本上需要" unpivot"每个事件的~150列到
的临时表中EmployeeID EventID
---------- -------
1 event1
1 event3
1 event7
最常见的" unpivot"在Access中,UNION ALL是一系列单独的SELECT。但是,这只适用于大约十几个UNION(之后Access会抛出一个"查询太复杂而且#34;错误),因此您必须将其分解为更小的"事件"字段并将结果存储在临时表中。
避免不得不做那些凌乱的" univoting"一遍又一遍,你应该修改你的数据库结构,使其成为" univoted"表永久并摆脱另一个表中的~150个字段。这是"短期疼痛,长期收益的典型案例"