形成特定报告所需的 MS Access 帮助

莎拉

我有一个表格,其中有一列是代理人姓名,一列是代理人可能拥有的每一项技能。为座席分配的每项技能在该技能下的字段中都显示为 1。

列看起来像这样:

+---------+----------+----------+----------+
|  Name   | 'Skill1' | 'Skill2' | 'Skill3' |
+---------+----------+----------+----------+
| John    |        1 |          |        1 |
| Sam     |        1 |        1 |          |
| Roberta |        1 |          |        1 |
+---------+----------+----------+----------+

我想进行一个查询,该查询返回所有代理名称的列表,其中每个特定技能的值为 1。查询将返回如下内容:

+-----------+
| Skill 1   |
+-----------+
| John      |
| Sam       |
| Roberta   |
+-----------+

此外,我希望能够查询单个名称并检索代理具有的所有技能(名称列的所有行均为 1 英寸),如下所示:

+-----------+
|  John     |
+-----------+
| Skill 1   |
| Skill 3   |
+-----------+

我已经使用索引在 Excel 中完成了此操作,但我是 Access 的新手,不确定如何完成此任务。

提前致谢。

李麦克

您发现此任务困难的原因之一是您的数据库未规范化,因此由于数据库的结构方式,您正在使用 MS Access,而不是使用它。

因此,虽然使用当前数据仍然可以找到解决方案,但生成的查询将很难构建,并且会充满多个混乱的iif语句,或者多个union查询一遍又一遍地执行相同的操作,每个“技能”一个。

然后,如果您希望向数据库添加另一个技能,则必须重写所有查询!

然而,如果您的数据库已规范化(正如 Gustav 在评论中所建议的那样),则任务将是一个简单的单行;更重要的是,如果您稍后添加新技能,您的查询将自动输出结果,就好像该技能一直存在一样。


你的数据是多对多的关系:一个代理可能有很多技能,一个技能可能被很多代理知道。

因此,表示这种关系的最合适的方式是使用联结表

因此,您将有一个代理表,例如:

tblAgents

+-----+-----------+----------+------------+
| ID  | FirstName | LastName |    DOB     |
+-----+-----------+----------+------------+
|   1 | John      | Smith    | 1970-01-01 |
| ... | ...       | ...      | ...        |
+-----+-----------+----------+------------+

这将只包含每个代理独有的信息,即最小化表中记录之间的重复信息。

然后,您将拥有一张可能的技能表,例如:

技能

+-----+---------+---------------------+
| ID  |  Name   |     Description     |
+-----+---------+---------------------+
|   1 | Skill 1 | Skill 1 Description |
|   2 | Skill 2 | Skill 2 Description |
| ... | ...     | ...                 |
+-----+---------+---------------------+

最后,您将拥有一个将代理链接到技能的联结表,例如:

tblAgentSkills

+----+----------+----------+
| ID | Agent_ID | Skill_ID |
+----+----------+----------+
|  1 |        1 |        1 |
|  2 |        1 |        2 |
|  3 |        2 |        1 |
|  4 |        3 |        2 |
+----+----------+----------+

现在,假设您想找出哪些代理有Skill 1,查询很简单:

select Agent_ID from tblAgentSkills where Skill_ID = 1

如果您想了解代理知道的技能怎么办?同样简单:

select Skill_ID from tblAgentSkills where Agent_ID = 1

当然,这些查询只会返回ID联结表中存在字段 - 但由于 ID唯一标识tblAgentstblSkills表中的记录,因此您只需要这样的 ID 即可检索任何其他必需的信息:

select 
    tblAgents.FirstName, 
    tblAgents.LastName
from 
    tblAgentSkills inner join tblAgents on 
    tblAgentSkills.AgentID = tblAgents.ID
where 
    tblAgentSkills.Skill_ID = 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MS Access报告排序

来自分类Dev

MS Access报告问题?

来自分类Dev

需要帮助在MS Access中实施完全外部联接

来自分类Dev

MS Access报告格式-分组

来自分类Dev

在MS Access中打印报告

来自分类Dev

需要帮助来了解MS Access中Allen Browne的ConcatRelated函数的WHERE参数

来自分类Dev

SQL Server / MS Access 帮助理解 NULL 和 LEFT JOIN 方面的 WHERE CLAUSE

来自分类Dev

从Visual Basic预览/打印MS Access报告

来自分类Dev

MS Access,刷新嵌入在表单中的报告

来自分类Dev

MS Access报告中的超链接

来自分类Dev

MS Access-报告中的总计

来自分类Dev

MS Access报告无法正确总计

来自分类Dev

MS Access,刷新嵌入在表单中的报告

来自分类Dev

MS ACCESS报告中的空白页

来自分类Dev

使用VBA显示MS Access报告

来自分类Dev

特定日期的MS Access数据标准

来自分类Dev

MS Access:如何过滤非报告字段上的报告?

来自分类Dev

MS Access过滤器表单可打开特定记录的报告

来自分类Dev

MS Access计数查询不会产生所需结果

来自分类Dev

MS ACCESS或Excel公式或代码以产生所需的输出列

来自分类Dev

基于表的MS Access报告引发“查询太复杂”错误

来自分类Dev

根据条件将MS Access报告导出为PDF

来自分类Dev

SQL ORDER BY在MS Access 2010报告中的行为异常

来自分类Dev

使用查询对MS Access中的报告进行排序

来自分类Dev

基于表的MS Access报告引发“查询太复杂”错误

来自分类Dev

MS Access报告结合了多个数据库

来自分类Dev

MS Access:如何使用宏生成个性化报告?

来自分类Dev

MS Access 2016 - 基于当前记录的打开报告

来自分类Dev

交叉表报告中的多个值 MS-Access