MS Access报表制作求助:代理技能关联查询实现
在MS Access中实现两类技能查询的解决方案
嘿,刚上手MS Access的话,确实会和Excel的操作逻辑不太一样,但这两个查询需求用SQL就能轻松实现,我给你详细拆解一下:
1. 查询具备指定技能的所有代理姓名
这个需求比较直接,我们只需要筛选出对应技能列值为1的记录,提取代理姓名即可。假设你的数据表名叫AgentsSkills(如果实际表名不同,替换成你的表名就行),要查询Skill1的代理,SQL语句如下:
SELECT Name AS [Skill 1] FROM AgentsSkills WHERE Skill1 = 1;
- 如果要查询其他技能,比如Skill2,只需要把
WHERE Skill1 = 1改成WHERE Skill2 = 1,同时把AS [Skill 1]改成AS [Skill 2]就行。 - 执行这个查询后,就能得到你想要的类似Excel里筛选后的结果。
2. 查询指定代理具备的所有技能
这个需求需要把列转换成行(也就是Excel里可能用INDEX+MATCH或者透视表做的事),在Access里我们可以用UNION ALL来合并多个查询结果,把每个技能列的判断结果整合到一起。还是假设表名叫AgentsSkills,要查询John的技能,SQL语句如下:
SELECT 'Skill 1' AS [John] FROM AgentsSkills WHERE Name = 'John' AND Skill1 = 1 UNION ALL SELECT 'Skill 2' AS [John] FROM AgentsSkills WHERE Name = 'John' AND Skill2 = 1 UNION ALL SELECT 'Skill 3' AS [John] FROM AgentsSkills WHERE Name = 'John' AND Skill3 = 1;
- 这个语句的逻辑是:分别检查每个技能列,只要John对应的该列值为1,就返回这个技能名称,最后把三个查询的结果合并起来。
- 如果要查询其他代理,比如Sam,只需要把所有
WHERE Name = 'John'改成WHERE Name = 'Sam',同时把AS [John]改成AS [Sam]即可。 - 要是你有更多技能列,只需要按照这个格式继续添加
UNION ALL对应的查询块就行。
小提示
和Excel的函数式操作不同,Access更擅长用SQL来处理这类数据转换和筛选需求,多写几次就能熟练啦~
内容的提问来源于stack exchange,提问作者Reyes
相关产品推荐
相关产品推荐

