
5.5 创建高级查询
本节主要介绍参数查询和交叉表查询这两种高级查询的创建方法,从而实现更为复杂的查询功能。
5.5.1 参数查询
参数查询是动态的,利用对话框要求用户输入参数,然后根据参数搜索到相关的记录,最后呈现在表格中。例如在人事管理系统中,若员工众多,当需要查看一个员工的信息时,往往需要根据员工姓名或者员工ID进行查询。这时就可以创建一个参数查询,在每次运行时会提示用户输入员工的姓名,再根据姓名进行查询。这种人机交互式的查询,就是参数查询。
下面在“工资明细表”中创建一个参数查询,要求输入某一员工的ID,可以查询出该员工的工资情况。具体的操作步骤如下。
步骤1打开随书光盘中的“素材\Ch05\人事管理.accdb”文件,单击【创建】选项卡下【查询】组中的【查询设计】按钮,如图5-90所示。

图5-90 单击【查询设计】按钮
步骤2此时会进入查询的设计视图,并弹出【显示表】对话框,选择“工资明细表”,单击【添加】按钮,如图5-91所示。

图5-91 【显示表】对话框
步骤3添加完成后,关闭【显示表】对话框。在查询设计网格中,将“员工ID”字段和“工资明细表.*”添加到【字段】行中,在“员工ID”字段对应的【条件】行中输入查询条件“[请输入员工ID:]”,注意文本两边需要用方括号括起来,如图5-92所示。

图5-92 添加字段并设置查询条件
步骤4单击【查询工具】→【设计】选项卡下【结果】组的【运行】按钮,如图5-93所示。

图5-93 单击【运行】按钮
步骤5弹出【输入参数值】对话框,假设在【请输入员工ID:】文本框中输入“2017001”,单击【确定】按钮,如图5-94所示。

图5-94 【输入参数值】对话框
步骤6即可查询出ID为“2017001”的员工工资情况,如图5-95所示。

图5-95 参数查询的结果
以上是单参数查询,用户也可以创建多参数查询。多参数查询是指设置两个以上的参数进行查询,只需在多个字段的【条件】行中输入参数的表达式,即可完成多参数查询。
5.5.2 交叉表查询
交叉表查询是指将数据水平分组和垂直分组,在水平分组与垂直分组的交叉处显示出统计结果。在创建交叉表查询时,需要指定三种字段:行标题、列标题和交叉值。Access规定,交叉表查询中行标题字段最多可以有3个,列标题字段和交叉值字段只能各有一个。
1.使用查询向导创建交叉表查询
使用查询向导创建交叉表查询时,所需要的字段必须存在于一个表或查询中。下面以“工资明细表”为数据源,查询每位员工实发工资总和。具体的操作步骤如下。
步骤1打开随书光盘中的“素材\Ch05\人事管理.accdb”文件,单击【创建】选项卡下【查询】组中的【查询向导】按钮,如图5-96所示。

图5-96 单击【查询向导】按钮
步骤2弹出【新建查询】对话框,选择【交叉表查询向导】选项,单击【确定】按钮,如图5-97所示。

图5-97 选择【交叉表查询向导】选项
步骤3在对话框中需要选择数据源表,这里选择【表:工资明细表】选项,单击【下一步】按钮,如图5-98所示。

图5-98 选择【表:工资明细表】选项
步骤4在对话框中需要选择作为行标题的字段,最多可以选3个。这里分别选中“员工ID”和“员工姓名”字段,单击【添加】按钮,将其添加到【选定字段】列表框中,然后单击【下一步】按钮,如图5-99所示。

图5-99 选择作为行标题的字段
步骤5在对话框中需要选择作为列标题的字段,只能选择1个。这里选择“发薪日期”字段,单击【下一步】按钮,如图5-100所示。

图5-100 选择作为列标题的字段
步骤6在对话框中需要选择值字段及函数类型。这里在【字段】列表框中选择“实发工资”字段,在【函数】列表框中选择【总数】选项,单击【下一步】按钮,如图5-101所示。

图5-101 选择值字段及函数类型
提示
选择“实发工资”字段和【总数】选项表示在表的交叉点显示7月和8月的实发工资,并计算两个月实发工资的总和。
步骤7在对话框中需要为查询指定标题,这里保持默认设置不变,单击【完成】按钮,如图5-102所示。

图5-102 指定查询的标题
步骤8此时将创建一个交叉表查询,并自动在数据表视图中显示出查询结果。至此,即完成使用查询向导创建交叉表查询的操作,如图5-103所示。

图5-103 交叉表查询的结果
2.使用设计视图创建交叉表查询
使用设计视图同样可以建立交叉表查询,与使用查询向导所不同的是,它可以在一个或多个表中进行创建。下面在“人事管理”数据库中,查询各部门员工的籍贯分布情况。具体的操作步骤如下。
步骤1打开随书光盘中的“素材\Ch05\人事管理.accdb”文件,单击【创建】选项卡下【查询】组中的【查询设计】按钮,如图5-104所示。

图5-104 单击【查询设计】按钮
步骤2此时会进入查询的设计视图,并弹出【显示表】对话框,按住Ctrl键不放,分别选择“部门表”“员工信息表”和“员工原始信息”作为数据源表,单击【添加】按钮,如图5-105所示。

图5-105 【显示表】对话框
步骤3添加完成后,关闭【显示表】对话框。此时在查询的设计视图中可以看到添加的表对象,单击【查询工具】→【设计】选项卡下【查询类型】组的【交叉表】按钮,如图5-106所示。

图5-106 单击【交叉表】按钮
步骤4进入交叉表查询的设计视图,在查询设计网格中,将“部门名称”字段添加到【字段】行中,然后单击【交叉表】右侧的下拉按钮,在弹出的下拉列表中选择【行标题】选项,表示将该字段设置为行标题,如图5-107所示。

图5-107 添加“部门名称”字段作为行标题
步骤5使用同样的方法,将“籍贯”字段添加到【字段】行中,并将该字段的【交叉表】设置为【列标题】,如图5-108所示。

图5-108 添加“籍贯”字段作为列标题
步骤6将“员工ID”字段添加到【字段】行中,单击该字段对应的【总计】右侧的下拉按钮,在弹出的下拉列表框中选择【计数】选项,如图5-109所示。

图5-109 选择【计数】选项
提示
【总计】下拉列表中的选项是Access提供的预定义函数,表示对查询结果进行统计计算。其中,Group By为默认选项,表示分组;合计表示统计字段值的总和;计数表示统计记录的记录数;StDev表示计算字段值的标准偏差值;First表示返回该字段的第一个值;Last表示返回最后一个值;Expression表示在字段中自定义计算公式。注意不同数据类型的字段,使用的函数是不同的。
步骤7将“员工ID”字段的【交叉表】设置为【值】,然后在【字段】行的第4列中输入“人数总计:[员工ID]”,将该字段的【总计】设置为【计数】,【交叉表】设置为【行标题】,如图5-110所示。

图5-110 添加第4个字段
提示
“人数总计:[员工ID]”需要按照“行名:[统计字段名]”这一格式手动输入,这个格式是固定的。
步骤8设置完成后,单击【查询工具】→【设计】选项卡下【结果】组的【运行】按钮,如图5-111所示。

图5-111 单击【运行】按钮
步骤9执行交叉表查询,查询结果如图5-112所示。

图5-112 交叉表查询的结果