4.2.4 使用“交叉表查询向导”创建查询
“交叉表查询”指将来源于某个表或查询中的字段进行分组,一组列在交叉表左侧,一组列在交叉表上部,并在交叉表行与列交叉处显示表中某个字段的各种计算值。
注意
交叉表的本质是显示数据在两层分组下的汇总统计结果,该结果依赖于函数。
【例4.7】利用“交叉表查询向导”创建交叉表查询,显示学生的“姓名”“课程名”“成绩”。要求“姓名”位于结果的左侧,“课程名称”位于结果的顶部,在行与列的交叉点显示该学生的该门课程的成绩。该查询以“查询向导—学生成绩信息_交叉表”名称保存。查询运行结果如图4.28所示。

图4.28 “查询向导—学生成绩信息查询_交叉表”查询运行结果
分析:该查询结果的数据源来自“学生”“选课成绩”“课程”3张表,而查询向导不允许从多个表或查询中选择数据源,所以要先根据选择的信息创建简单查询,然后再创建交叉表查询。本例的简单查询在前面已经创建,就是“查询向导—学生成绩信息查询”,接下来要做的就是设置交叉表查询的“行标题”“列标题”“交叉点数据”。具体操作步骤如下:
(1)选择交叉表查询向导。在打开的数据库窗体中,单击“创建”选项卡“查询”组中的“查询向导”按钮,在弹出的对话框中选择“交叉表查询向导”选项,如图4.29所示。
(2)进入向导的第一步设置:选择表或查询作为交叉表查询数据源,仅允许选择一个表或查询。根据前面的分析,在“视图”区域选择“查询”单选按钮,选择“查询向导—学生成绩信息”查询,如图4.30所示。

图4.29 选择“交叉表查询向导”

图4.30 选择“交叉表查询数据源”
(3)进入向导的第二步设置:选择行标题。行标题位于查询结果行的左侧,即每一行的标题。根据前面的分析,选择“姓名”作为行标题,如图4.31所示。
(4)进入向导的第三步设置:选择列标题。列标题位于查询结果所有行的最上方,即每一列的标题。根据前面的分析,选择“课程名称”作为列标题,如图4.32所示。

图4.31 选择“行标题”

图4.32 选择“列标题”
(5)进入向导的第四步设置:选择交叉点的数据。交叉点数据是行与列的交叉点显示的数据,往往是一个计算结果。交叉表的本质是显示数据在两重分组后的汇总统计结果。本例中按照行标题“姓名”和列标题“课程名”进行两次分组后,每组数据仅有一行,所以只要把这一行的成绩信息显示出来即可,对于一个成绩数据,图4.33右侧列出大多数函数的计算结果是一样的,为准确起见,希望显示的是每一组的第一个数据(尽管每组只有一个数据),所以选择的计算字段为“成绩”,函数是“First”,如图4.33所示。
(6)进入向导的第五步设置:查询名称和打开方式设置。保存名称为“查询向导—学生成绩信息查询_交叉表”。查询运行结果如图4.28所示。
注意
交叉表查询的数据源只能是一个表或查询,如果数据来源于多张表,需要先依据查询结果建立查询,然后在查询的基础上做两次分组,然后显示分组后的统计数据。
思考:查询统计每个班级的男生、女生人数。班级名称在查询结果左侧,性别在查询结果上部。查询结果如图4.34所示。

图4.33 选择“交叉点数据”

图4.34 交叉表查询—分班级_性别人数统计
提示:数据是“班级名称”“性别”“人数”(计算字段)。数据来源于“学生”表。计算字段是按照“班级名称”和“性别”做两次分组后,对一组内数据统计个数所得。
利用查询向导,能完成很多基本的查询要求,而且操作简单,按照向导的提示说明进行设置即可。但其局限性也不容忽视,比如不能对结果进行排序、筛选,分组统计不够灵活,不能进行新字段的定义等。为了实现查询的强大功能,需要使用查询设计视图自定义查询条件。