1、(1)用“预定义计算”方式设置字段例题4. 3要求针对按部门所作的分组进行记 录组数量计算,这里我们先采用“预定义计算” 的方法。因为这三个字段都是针对大修费用的计 算,所以我们先把这三个字段都添加为“dx”表 的“费用”字段。如图4. 20所示。国查询1O 回 次图4.20 添加三个“dx”表的“费用”字段对于“总计”计算,我们可以用“简单查询向导”来完成,但它只能进行某些类型的总计计 算;而如果选用查询设计网格中的“总计:”行来 进行,那么可以进行全部类型的总计计算,但要为 进行计算的字段选择聚合函数。那么,怎么在查询设计网格中添加“总计:”行呢?我们需要先激活查询设计视图,这时通过续表注
2、:“expression”代表一个字符串表认式,它标识了包含要计算的数据的字段,或者是使用该字 段中的数据执行计算的表认式 “expression”中的操作数可包括表字段、常量或函数(可以 是固有的或用户白宗义的函数,但不能是其他SQL聚合函数)的名称.CountCount (expression)计算杳询所返问的记录数c尽管expression能够对字段执行计算. 但是Count仅仅计算出记录的数目0记录中所存储的数值类型与 计算无关cCount函数不统计包含Null字段的记录,除非expression是 星号(*)通配符0如果使用了星号通配符.Count会计算出包括 Null字段在内的所有
3、记录的数0 .MinMin (expression)返回包含在杳询的指定字段内的一组值中的最小值.MaxMax (expression)返P1包含在杏血的指定字段内的一组值中的最大值C根据例题4.3的要求,除了 “部门”字段, 其余三个字段都需要构造表达式。添加“部门” 字段之后,在“字段行的第二列右击键,在弹 出的快捷菜单中选择“生成器”或在“设计”选 项卡的“查询设置”组中单击“生成器”,都会弹 出“表达式生成器:要统计各部门的大修费用总和,首先在“表 达式生成器”中选择Sum (expression)函数, 此时,“表达式生成器”的“表达式”框中显示为 “各部门大修费用总和:表达式 Su
4、m (expression);然后,单击“表达式”,按Del 键删除,再单击Sum函数中的“expression”; 接下来,在“表达式元素”资源列中选择“设 备.accdb”下“dx”表的“费用”,双击“表达式 值”列表下的“值工构造出第二列的计算字段,并为它设置列标题“各部门大修费用总和”,单击 “确定”按钮,如图4. 28所示。并为它设置列标题“各部门大修费用总和”,单击 “确定”按钮,如图4. 28所示。图4. 28 幺部门大修冷闺强和如果对表达式构造比拟熟悉,还可以直接在 “字段行输入某个计算字段的表达式。类似 的,我们设置好所有字段,如图4. 29所示字排显条字排显条照表序示件或各
5、都门大修费用最高值:费用)各部门大修责用最低值:lhn(dx贾用)三51a各部门大修置用总和:Swn (dx索用)图4.29 各计算字段的设置设置好所有的字段表达式,还不能完成例题4. 3的要求,因为还不能按照“部门”进行分组, 这样后面的计算字段也就没有了用武之地。按照 “预定义计算”的方法,先对“部门”字段在“总 计:”行进行分组。注意,这时其余的三个字段就 不能再按照以前的方式进行设置了。如果表达式中包含一个或多个聚合函数(总 计、平均值、计数、最小值、最大值、标准差或 方差),而且如果设计网格包含另一个或多个用 于分组的字段时,我们这样处理:对分组字段, “总计:”单元格中保持为Gro
6、up By”,而在计 算字段中,将Group By”更改为“Expression”。 所以,其余三个字段在“总计:”行的设置均为“Expression”,如图 4. 30 所示。图4. 30自定义计算”方式中设定分组字段这时运行查询,我们会发现两种方法得到的结果 是完全一样的。表达式的构造是“自定义计算”方法中非常 重要的环节,在建立表达式时,需要注意以下事 项:字段包含在一对方括号(口)中。例如:售价* 销售量。常数字符串包含在一对双引号中。例如: 员工姓名& 先生/小姐。图4.30 ”自定义计算”方式中没宗分组字段日期时间包含在一对“井字号(#)中。 例如:#1994 / 1 / 10 例
7、 10: 20# +10。也可使用运算符“ & ”或“ + ”来联接文字 类型字段或文字字符串。例如:收信人地址: & 邮政编码& 住家地址或收信人地址: + 邮政编码+ 住家地址,点击“设计”选项卡中“汇总”,就可以在设计网 格中显示“总计行。默认所有字段在“总计:” 行的初始设置均为“Group By”(分组),如图4. 21 所示。字忌排异至段表计序示件或费用 dxGroup By国费用 dxGroup By费用 dxGroup By立值值值 VFirstLxtExpressionWhere图4.21 显示总计:”行从图4.21我们可以看出,“总计:”行的计算功能比拟多,主要由聚合函数组
8、成。关于查询 设计网格“总计:”行中的聚合函数及其他选项请 详见表4.2和表4.和表4.2“总计:”行中的聚合函数洗项功能说明可使用字段数据类型合计求字段值的总和数字、日期/时间、货币和自动编号平均值求字段的平均值数字、日期/时间、货币和自动编号最小值求字段的最小值文本、数字、日期/时间、货币和自动编号最大值求字段的最大值文本、数字、日期/时间、货币和自动编号计数求字段值的个数,不包括Null 值文本、备注、数字、日期/时间、货币、自动编号、 杲/否和OLE对象StDev (标准差)求字段的标准差值数字、日期/时间、货币和自动编号变tt求字段的方差值数字、日期/时间、货币和自动编号表4.3“总
9、计:”行中的其他诜项洗项功能说明First (第一条记录)返网所执行计算的组中的第一个记录Last (最后一条记录)返回所执行计算的组中的最后一个记录Group By (分组)宗义要执行计算的组(例如,如果要按类别显示销售额总计,应对“类别 名称”字段诜择“分组”)Expression (表达式)创律在其表认式中包含聚合函数的计算字段(诵常在表认式中使用多个函 数时,创立计算字段)Where (条件)指定不用干定义分组的字段条件(如果选中这个字段诜项,Access膈清 除“显示”复选框,隐藏杳询结果中的这个字段)注意:“First”函数和“Last”函数按记录 输入的时间顺序返回第一个记录或最
10、后一个记 录。对记录进行排序并不影响这些函数。综合以上分析,例题4. 3中的“部门”字段 是要进行分组的字段,所以它的“总计行设为 Group By”。在按“部门”分组的情况下,其余 的三个“费用”字段分别要来计算各组的费用总 和、费用最高值和费用最低值。所以,剩余三个字 段的“总计:”行分别设为“合计”、“最大值”和“最小值”,如图4. 22所示。这时我们切换至“数据表视图”或者单击“运 行”,就会看到查询的结果,如图4. 23所示。从查询结果中不难看出,某个字段如果进行了计算,那么它在查询结果中对应的列标题就会发 生变化,但是系统自动处理的名称并缺乏以说明 这个字段确实切含义,所以,还需对
11、字段名称加 以修饰。默认情况下,查询结果中每列的标题就是这 列的字段名称,但是假设字段进行了计算,或在字段中使用了表达式,那么列标题就会由Access自 动命名。这个新的名字只是在显示查询结果的时 候才出现,它并不是真正的字段名。如果对查询 结果中显示的列标题不满意,我们可以为它设置身查询1a E S3新的标题栏名称。如图4. 24所示。图4.22“总计:”行的设置国查询1O 回 应部门*11费用之合计 111592-费用N最大1000费用之最小,921221802808028080280ia: Y 4a 1项供3项)a无标透器图4. 23运行结果a 0 S3部门各部门大修费用总和sbdxGr
12、oup By合计0H 1部门各部门大修费用总和sbdxGroup By合计0H 1各部门大修费用最高1费用最大值mi段表计序示件或 字总播显条dx最小值痛放各部门大修费用最低值费用XV 字体任). I图4.24 为字段设置列标颍用鼠标单击要设置的字段名称,当光标进入 字段名所在的组合框时,按照“列标题名称:字段 名”的格式在原来的字段名前面输入新的列标题 即可。如果对组合框的输入空间不满意,还可以 按“Shift+F2”键,进入“缩放”对话框,在对话框中编辑好列标题后,单击“确定”按钮即可。这时的查询结果如图4. 25所示。图4.25 字段设置列标撅后的杳血结果从图4. 25中我们还可以发现一
13、个问题:并不是所有部门的统计信息都显示在查询结果中。例如:部门为“22”和“23”的统计信息就不存 在。事实上,这样的查询结果并不能代表所有部 门的统计结果。发生这种情况的原因在于两表之间关系的 联接类型取的是默认内部联接。“ sb ”表和“ dx” 表之间具有关系,它们的联接条件是“sb 编号 =dx 编号力我们把两表中的“编号”字段称为 联接字段,“sb”表和“dx”表分别称为左表和右 表。在Access数据库中联接类型包括三种:内部联接:只有当两表联接字段中的值符合指定条件时,两个表的记录才会组合在一个查 询结果中。在查询中,默认的联接是内部联接。左外部联接:在这种外部联接中,即便左 表
14、的联接字段在右表的联接字段中没有找到匹 配值,所有来自左表的记录也都将添加到查询的 结果中。右外部联接:在这种外部联接中,即便在 左表的联接字段中没有匹配值,所有来自右表的 记录也都将添加到查询的结果中。我们现在的查询联接类型是默认的内部联 接,以部门“23”为例,这个部门的两个设备的 编号在“dx”表中根本不存在,自然也就不能满 足联接条件,所以这两条记录就都不能出现在查 询结果中,也就没有了部门“23”的统计信息。我们可以通过更改联接类型来到达要求。双击表或查询的字段列表之间的联接线,在“联接 属性”对话框中,单击所需的联接选项,然后单 击“确定”按钮即可,如图4. 26所示。从图4. 2
15、6可以看出,“sb”表为左表,要想保存左表的记录全部出现在查询结果中,需把联 接类型选为“2二这时再来运行查询,可以看出 所有部门的统计信息都出现在查询结果中,只不过部门为“ 22 ”和“ 23 ”的设备都没有大修记录,所以对应的统计结果为空。查询结果如图4. 27所ZjS O以上我们通过“预定义计算”的方式完成了 例题4. 3的字段设置,下面说明如何采用“自定 义计算”的方式来完成相同功能的字段设置。国查询10回 次左袤名称(L)联接雇性右袤名称)12 3 oo12 3 oo段表计序示件或 字总排显条sbdx左列名称(C)右列名称9)编号鬲编号i V只包含两个表中联接字段相等的行。包括“ s
16、b”中的所有记录和“ dx”中联接字段相等的那些记录。 包括“七”中的所有记录和“sb”中联接字段相等的那些记录。确定取消新建(H)图4. 26 修改表间关系的联接类型图4. 27 左外部联接杳询结果用“自定义计算”方式设置字段“自定义计算”其实就是根据需要用一个或 多个字段数据写成表达式,然后在“字段行的 空单元格中键入该表达式,从而创立新的计算字 段来作为查询结果中的一个新的字段列,这个表 达式的计算方法作用在所有的记录或记录组上。要想构造计算字段的表达式,我们除了应用以前介绍的Access支持的各种运算量和运算符 之外,更多使用的是SQL聚合函数。通过SQL聚 合函数,可以确定数值集合的各种统计值。其实, 我们刚刚介绍的“总计:”行中使用的聚合函数就 是我们所说的SQL聚合函数,只不过,在“总计:” 行中没有看到具体的函数表达式。下面介绍几个 常用的聚合函数,参见表4.4。表4.J 几个常用的聚合函数函数格式功能说,明AvgAvg (expression)计算在杳泡的指定字段中所包含的一组值的算术平均值(值的总和 除以值的数目).在计算中.Avg函数不能包含任何Null字段.SumSum (expression)返回在杳询的指定字段中所包含的一组值的总和. Sum函数将忽 略包含Null字段的记录.