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