本文介绍如何使用 Access 中的聚合函数对查询结果集中的数据求和。 它还简要说明了如何使用其他聚合函数(如 COUNT 和 AVG)对结果集中的值进行计数或求平均值。 此外,它还说明了如何使用“总计”行在不更改查询设计的情况下对数据求和。
您要做什么?
了解求和数据的方法
您可以使用称为聚合函数的函数类型对查询中的数字列求和。 聚合函数对数据列执行计算并返回单个值。 Access 提供了各种聚合函数,包括Sum用于计算平均值) 的 、 CountAvg (和 MinMax。 通过将 Sum 函数添加到查询来求和数据。 可以使用函数等对 Count 数据进行计数。
此外,Access 还提供多种方法可向查询添加 Sum 聚合函数和其他聚合函数。 你可以:
- 在“数据表”视图中打开查询,并添加“总计”行。 Access 中的一项功能“总计”行可用于在查询结果集的一个或多个列中使用聚合函数,而无需更改查询设计。
- 创建总计查询。 总计查询计算记录组之间的分类汇总;“总计”行计算数据) 的一列或多列 (字段的总计。 例如,如果要按城市或季度对所有销售额进行小计,则可以使用总计查询按所需类别对记录进行分组,然后对销售数据求和。
- 创建交叉表查询。 交叉表查询是一种特殊类型的查询,它会在类似于 Excel 工作表的网格中显示其结果。 交叉表查询汇总值,然后按两组事实对它们进行分组 — 一组设置在行标题 (侧) ,另一组设置在前 (列标题) 。 例如,可以使用交叉表查询来显示每个城市过去三年的总销售额,如下表所示:
| 城市 | 2003 | 2004 | 2005 |
|---|---|---|---|
| 巴黎 | 254,556 | 372,455 | 467,892 |
| 悉尼 | 478,021 | 372,987 | 276,399 |
| Jakarta(雅加达) | 572,997 | 684,374 | 792,571 |
| ... | ... | ... | ... |
注意
本文档中的操作方法部分强调使用该 Sum 函数,但你也可以在“总行数”和查询中使用其他聚合函数。 有关详细信息,请参阅本文后面的 聚合函数参考 。
有关使用其他聚合函数的方法的详细信息,请参阅 文章在数据表中显示列总计。
以下部分中的步骤介绍了如何添加“总计”行、使用总计查询对跨组的数据求和,以及如何使用交叉表查询对跨组和时间间隔的数据进行分类汇总。 继续操作时,请记住,许多聚合函数仅适用于设置为特定数据类型的字段中的数据。 例如,该 SUM 函数仅适用于设置为“数字”、“小数”或“货币”数据类型的字段。 有关每个函数所需的数据类型的详细信息,请参阅本文后面的 聚合函数参考 。
有关数据类型的一般信息,请参阅 修改或更改为字段设置的数据类型一文。
准备一些示例数据
本文中的操作方法部分提供了示例数据表。 操作方法步骤使用示例表来帮助您了解聚合函数的工作原理。 如果您愿意,可以选择将示例表添加到新的或现有的数据库中。
Access 提供多种方法将这些示例表添加到数据库。 可以手动输入数据,可以将每个表复制到电子表格程序(如 Excel)中,然后将工作表导入 Access,也可以将数据粘贴到文本编辑器(如记事本)中,然后从生成的文本文件中导入数据。
本部分的步骤介绍如何在空白数据表中手动输入数据,以及如何将示例表复制到电子表格程序,然后将这些表导入 Access。 有关创建和导入文本数据的详细信息,请参阅 本文 导入或链接到文本文件中的数据。
本文中的操作步骤使用下表。 使用这些表创建示例数据:
类别表:
| 类别 |
|---|
| Dolls |
| 游戏和拼图 |
| 艺术和取景 |
| 视频游戏 |
| DVD 和电影 |
| 模特和爱好 |
| Sports |
“产品”表:
| 产品名称 | 价格 | 类别 |
|---|---|---|
| 程序员可动人偶 | $12.95 | Dolls |
| Fun with C# (适合全家人的棋盘游戏) | $15.85 | 游戏和拼图 |
| 关系数据库关系图 | $22.50 | 艺术和取景 |
| 魔法电脑芯片 (500 块) | $32.65 | 游戏和拼图 |
| 访问! 游戏! | $22.95 | 游戏和拼图 |
| 计算机极客和神话生物 | $78.50 | 视频游戏 |
| 计算机极客的练习! The DVD! | $14.88 | DVD 和电影 |
| 终极飞行披萨 | $36.75 | Sports |
| 外部 5.25 英寸软盘驱动器 (1/4 比例) | $65.00 | 模特和爱好 |
| 官僚非动作人物 | $78.88 | Dolls |
| 阴郁 | $53.33 | 视频游戏 |
| 构建自己的键盘 | $77.95 | 模特和爱好 |
订单表:
| 订单日期 | 发货日期 | Ship City | 运费 |
|---|---|---|---|
| 11/14/2005 | 11/15/2005 | Jakarta(雅加达) | $55.00 |
| 11/14/2005 | 11/15/2005 | 悉尼 | $76.00 |
| 11/16/2005 | 11/17/2005 | 悉尼 | $87.00 |
| 11/17/2005 | 11/18/2005 | Jakarta(雅加达) | $43.00 |
| 11/17/2005 | 11/18/2005 | 巴黎 | $105.00 |
| 11/17/2005 | 11/18/2005 | 斯图加特 | $112.00 |
| 11/18/2005 | 11/19/2005 | 维也纳 | $215.00 |
| 11/19/2005 | 11/20/2005 | 迈阿密 | $525.00 |
| 11/20/2005 | 11/21/2005 | 维也纳 | $198.00 |
| 11/20/2005 | 11/21/2005 | 巴黎 | $187.00 |
| 11/21/2005 | 11/22/2005 | 悉尼 | $81.00 |
| 11/23/2005 | 11/24/2005 | Jakarta(雅加达) | $92.00 |
“订单详细信息”表:
| 订单 ID | 产品名称 | 产品 ID | Unit Price | 数量 | Discount |
|---|---|---|---|---|---|
| 1 | 构建自己的键盘 | 1.2 | $77.95 | 9 | 5% |
| 1 | 官僚非动作人物 | 2 | $78.88 | 4 | 7.5% |
| 2 | 计算机极客的练习! The DVD! | 7 | $14.88 | 6 | 4% |
| 2 | 神奇的计算机芯片 | 4 | $32.65 | 8 | 0 |
| 2 | 计算机极客和神话生物 | 6 | $78.50 | 4 | 0 |
| 3 | 访问! 游戏! | 5 | $22.95 | 5 | 15% |
| 4 | 程序员活动人偶 | 1 | $12.95 | 2 | 6% |
| 4 | 终极飞行披萨 | 8 | $36.75 | 8 | 4% |
| 5 | 外部 5.25 英寸软盘驱动器 (1/4 比例) | 9 | $65.00 | 4 | 10% |
| 6 | 关系数据库关系图 | 3 | $22.50 | 1.2 | 6.5% |
| 7 | 阴郁 | 11 | $53.33 | 6 | 8% |
| 7 | 关系数据库关系图 | 3 | $22.50 | 4 | 9% |
注意
请记住,在典型的数据库中,订单详细信息表将仅包含“产品 ID”字段,而不包含“产品名称”字段。 示例表使用“产品名称”字段使数据更易于阅读。
手动输入示例数据
在“创建”选项卡上的“表”组中,单击“表”。 Access 将新的空白表添加到数据库。
注意
如果打开新的空白数据库,无需执行此步骤,但每次需将表添加到数据库时均需此步骤。
双击标题行中的第一个单元格,然后在示例表中输入字段的名称。 默认情况下,Access 在标题行中用文字 “添加新字段”表示空白字段,如下所示:
使用箭头键移动到下一个空白标题单元格,然后键入第二个字段名称。 还可以按
TAB或双击新单元格。 重复此步骤,直到输入所有字段名称。在示例表中输入数据。 输入数据时,Access 会推断每个字段的数据类型。 如果不熟悉关系型数据库,则应为表中的每个字段设置特定的数据类型,例如数字、文本或日期/时间。 设置数据类型有助于确保准确的数据输入,还有助于防止错误,例如在计算中使用电话号码。 对于这些示例表,应让 Access 推断数据类型。
输入完数据后,单击“ 保存”。 键盘快捷方式:按 CTRL+S。 将显示“另存为”对话框。
在 “表名称 ”框中,输入示例表的名称,然后单击 “确定”。 使用每个示例表的名称是因为操作方法部分中的查询使用这些名称。
重复这些步骤,直到创建本节开头列出的每个示例表。
如果不想手动输入数据,请按照后续步骤将数据复制到电子表格文件,然后将电子表格文件中的数据导入 Access。
创建示例工作表
启动电子表格程序并创建一个新的空白文件。 如果使用 Excel,它默认会创建一个新的空白工作簿。
复制上面提供的第一个示例表并将其粘贴到第一个工作表中,从第一个单元格开始。
使用电子表格程序提供的技术,重命名工作表。 为工作表指定与示例表相同的名称。 例如,如果示例表的名称为 “类别”,请为工作表赋予相同的名称。
重复步骤 2 和 3,将每个示例表复制到空白工作表并重命名工作表。
注意
可能需要将工作表添加到电子表格文件。 有关执行该任务的信息,请参阅电子表格程序的帮助。
将工作簿保存到计算机或网络上的方便位置,然后执行后续步骤。
基于工作表创建数据库表
- 在“外部数据”选项卡的“导入 & 链接”组中,单击“从文件>Excel 新建数据源>”。 将出现“ 获取外部数据 - Excel 电子表格 ”对话框。
- 单击 “浏览”,打开在前面步骤中创建的电子表格文件,然后单击 “确定”。 将启动导入电子表格向导。
- 默认情况下,向导会选择工作簿中的第一个工作表 (“客户 ”工作表(如果) 按照上一节中的步骤操作),工作表中的数据将显示向导页的下半部分。 单击“下一步”。
- 在向导的下一页上,单击“ 第一行包含列标题”,然后单击“ 下一步”。
- (可选)在下一页上,使用 字段选项 下的文本框和列表更改字段名称和数据类型,或从导入操作中省略字段。 否则,请单击“下一步”。
- 保持 选中“让 Access 添加主键 ”选项,然后单击 “下一步”。
- 默认情况下,Access 向新表应用工作表的名称。 接受该名称或输入另一个名称,然后单击 “完成”。
- 重复步骤 1 到 7,直到从工作簿中的每个工作表创建一个表格。
重命名主键字段
注意
导入工作表时,Access 自动向每个表添加了一个主键列。 默认情况下,Access 为该列 ID 命名并将其设置为 AutoNumber 数据类型。 本节中的步骤说明如何重命名每个主键字段。 这样做有助于清楚地标识查询中的所有字段。
- 在导航窗格中,右键单击在前面步骤中创建的每个表,然后单击“ 设计视图”。
- 对于每个表,找到主键字段。 默认情况下,Access 为每个字段命名 ID。
- 在每个主键字段的“ 字段名称 ”列中,添加表的名称。 例如,将“类别”表的 ID 字段重命名为“类别 ID”,将“订单”表的字段重命名为“订单 ID”。对于“订单详细信息”表,请将字段重命名为“详细信息 ID”。对于“产品”表,将字段重命名为“产品 ID”。
- 保存所做的更改。
无论何时示例表出现在本文中,它们都包括主键字段,并按照上述步骤中的说明重命名该字段。
使用“总计”行对数据求和
可以通过以下方式向查询中添加“总计”行:在“数据表”视图中打开查询,添加行,然后选择要使用的聚合函数,例如 Sum、 Min、 Max或 Avg。 本节中的步骤介绍如何创建基本选择查询并添加“总计”行。 您不需要使用上一节中介绍的示例表。
创建基本选择查询
- 在“创建”选项卡上的“查询”组中,单击“查询设计”。
- 双击要在查询中使用的一个或多个表。 选定的一个或多个表在查询设计器的上半部分显示为窗口。
- 双击要在查询中使用的表字段。 您可以包括包含描述性数据(如名称和说明)的字段,但必须包括包含数字或货币数据的字段。 每个字段都显示在设计网格的单元格中。
- 单击 “运行” 以运行查询。 查询结果集将显示在数据表视图中。
- (可选)切换到“设计”视图并调整查询。 为此,请右键单击查询的文档选项卡,然后单击 “设计视图”。 然后,您可以根据需要通过添加或删除表字段来调整查询。 若要删除字段,请在设计网格中选择列,然后按 Delete。
- 保存查询。
添加“总计”行
- 确保查询已在“数据表”视图中打开。 为此,请右键单击查询的文档选项卡,然后单击“ 数据表视图”。 -或- 在导航窗格中,双击查询。 这将运行查询并将结果加载到数据表中。
- 在“开始”选项卡上的“记录”组中,单击“合计”。 数据表中将显示一个新的 “总计 ”行。
- 在“ 总计 ”行中,单击要求和的字段中的单元格,然后从列表中选择“ 求和 ”。
隐藏汇总行
- 在“开始”选项卡上的“记录”组中,单击“合计”。
有关使用“总计”行的详细信息,请参阅 文章在数据表中显示列总计。
使用查询计算总计
总计是列中所有值的总和。 可以计算多种类型的总计,包括:
- 对单列中的值求和的简单总计。 例如,可以计算总运费。
- 对多列中的值求和的计算总计。 例如,可以通过将多个商品的成本乘以订购的商品数量,然后对所得值进行总加法来计算总销售额。
- 不包括某些记录的总计。 例如,只能计算上周五的总销售额。
以下部分中的步骤说明了如何创建每种类型的总计。 这些步骤使用“订单”和“订单详细信息”表。
订单表
| 订单 ID | 订单日期 | 发货日期 | Ship City | 运费 |
|---|---|---|---|---|
| 1 | 11/14/2005 | 11/15/2005 | Jakarta(雅加达) | $55.00 |
| 2 | 11/14/2005 | 11/15/2005 | 悉尼 | $76.00 |
| 3 | 11/16/2005 | 11/17/2005 | 悉尼 | $87.00 |
| 4 | 11/17/2005 | 11/18/2005 | Jakarta(雅加达) | $43.00 |
| 5 | 11/17/2005 | 11/18/2005 | 巴黎 | $105.00 |
| 6 | 11/17/2005 | 11/18/2005 | 斯图加特 | $112.00 |
| 7 | 11/18/2005 | 11/19/2005 | 维也纳 | $215.00 |
| 8 | 11/19/2005 | 11/20/2005 | 迈阿密 | $525.00 |
| 9 | 11/20/2005 | 11/21/2005 | 维也纳 | $198.00 |
| 10 | 11/20/2005 | 11/21/2005 | 巴黎 | $187.00 |
| 11 | 11/21/2005 | 11/22/2005 | 悉尼 | $81.00 |
| 1.2 | 11/23/2005 | 11/24/2005 | Jakarta(雅加达) | $92.00 |
“订单详细信息”表
| 详细信息 ID | 订单 ID | 产品名称 | 产品 ID | Unit Price | 数量 | Discount |
|---|---|---|---|---|---|---|
| 1 | 1 | 构建自己的键盘 | 1.2 | $77.95 | 9 | 0.05 |
| 2 | 1 | 官僚非动作人物 | 2 | $78.88 | 4 | 0.075 |
| 3 | 2 | 计算机极客的练习! The DVD! | 7 | $14.88 | 6 | 0.04 |
| 4 | 2 | 神奇的计算机芯片 | 4 | $32.65 | 8 | 0.00 |
| 5 | 2 | 计算机极客和神话生物 | 6 | $78.50 | 4 | 0.00 |
| 6 | 3 | 访问! 游戏! | 5 | $22.95 | 5 | 0.15 |
| 7 | 4 | 程序员活动人偶 | 1 | $12.95 | 2 | 0.06 |
| 8 | 4 | 终极飞行披萨 | 8 | $36.75 | 8 | 0.04 |
| 9 | 5 | 外部 5.25 英寸软盘驱动器 (1/4 比例) | 9 | $65.00 | 4 | 0.10 |
| 10 | 6 | 关系数据库关系图 | 3 | $22.50 | 1.2 | 0.065 |
| 11 | 7 | 阴郁 | 11 | $53.33 | 6 | 0.08 |
| 1.2 | 7 | 关系数据库关系图 | 3 | $22.50 | 4 | 0.09 |
计算简单总计
在“创建”选项卡上的“查询”组中,单击“查询设计”。
双击要在查询中使用的表。 如果使用示例数据,请双击“订单”表。 该表显示在查询设计器上半部分的窗口中。
双击要求和的字段。 确保该字段设置为“数字”或“货币”数据类型。 如果尝试对非数字字段(如文本字段)中的值求和,Access 会在尝试运行查询时显示 “条件表达式中的数据类型不匹配 ”错误消息。 如果使用示例数据,请双击运费列。 如果要计算这些字段的总计,可以将其他数值字段添加到网格。 总计查询可以计算多个列的总计。
在 “查询设计 ”选项卡的“ 显示/隐藏 ”组中,单击 “总计”。 “ 总计 ”行显示在设计网格中,“ 分组依据 ”显示在“运费”列的单元格中。
将“ 总计 ”行中单元格中的值更改为 “总和”。
单击 “运行” 以运行查询并在数据表视图中显示结果。
提示
Access 会追加
SumOf到求和字段名称的开头。 若要将列标题更改为更有意义的标题(例如总 运费),请切换回“设计”视图,然后单击设计网格中“运费”列的“ 字段 ”行。 将光标放在 Shipping Fee 旁边并键入Total Shipping: Shipping Fee。或者,保存查询并将其关闭。
计算排除部分记录的总计
在“创建”选项卡上的“查询”组中,单击“查询设计”。
双击“订单”表和“订单详细信息”表。
将“订单”表中的“订单日期”字段添加到查询设计网格的第一列。
在第一列的 “条件 ”行中键入
Date() -1。 该表达式从计算的总计中排除当天的记录。接下来,创建计算每笔交易的销售额的列。 在网格中第二列的 字段 行中键入以下表达式:
Total Sales Value: (1-[Order Details].[Discount]/100)*([Order Details].[Unit Price]*[Order Details].[Quantity])确保表达式引用设置为“数字”或“货币”数据类型的字段。 如果您的表达式引用设置为其他数据类型的字段,则当您尝试运行查询时,Access 会显示条件 表达式中的数据类型不匹配 消息。在 “查询设计 ”选项卡的“ 显示/隐藏 ”组中,单击 “总计”。 “ 总计 ”行显示在设计网格中,“ 分组依据 ”显示在第一列和第二列中。
在第二列中,将“ 总计 ”行单元格中的值更改为 “总和”。 Sum 函数将对各个销售数字求和。
单击 “运行” 以运行查询并在数据表视图中显示结果。
将查询另存为 “每日销售”。
注意
下次在“设计”视图中打开查询时,你可能会注意到“总销售额”列的“ 字段” 和 “总计 ”行中指定的值略有变化。 表达式显示在 Sum 函数内,总 计 行显示表达 式 而不是 Sum。
例如,如果使用示例数据并按前面步骤) 所示创建查询 (,则会看到:
Total Sales Value: Sum((1-[Order Details].Discount/100)*([Order Details].Unitprice*[Order Details].Quantity))
使用总计查询计算组总计
本节中的步骤说明如何创建总计查询来计算数据组的小计。 继续操作时,请记住,默认情况下,总计查询只能包括包含组数据的一个或多个字段(如“类别”字段)和包含要求和的数据的字段(如“销售”字段)。 总计查询不能包含描述类别中项目的其他字段。 如果您想查看该描述性数据,可以创建第二个选择查询,将总计查询中的字段与其他数据字段组合在一起。
本节中的步骤介绍如何创建总计和选择确定每个产品的总销售额所需的查询。 这些步骤假定使用以下示例表:
“产品”表
| 产品 ID | 产品名称 | 价格 | 类别 |
|---|---|---|---|
| 1 | 程序员可动人偶 | $12.95 | Dolls |
| 2 | Fun with C# (适合全家人的棋盘游戏) | $15.85 | 游戏和拼图 |
| 3 | 关系数据库关系图 | $22.50 | 艺术和取景 |
| 4 | 魔法电脑芯片 (500 块) | $32.65 | 艺术和取景 |
| 5 | 访问! 游戏! | $22.95 | 游戏和拼图 |
| 6 | 计算机极客和神话生物 | $78.50 | 视频游戏 |
| 7 | 计算机极客的练习! The DVD! | $14.88 | DVD 和电影 |
| 8 | 终极飞行披萨 | $36.75 | Sports |
| 9 | 外部 5.25 英寸软盘驱动器 (1/4 比例) | $65.00 | 模特和爱好 |
| 10 | 官僚非动作人物 | $78.88 | Dolls |
| 11 | 阴郁 | $53.33 | 视频游戏 |
| 1.2 | 构建自己的键盘 | $77.95 | 模特和爱好 |
“订单详细信息”表
| 详细信息 ID | 订单 ID | 产品名称 | 产品 ID | Unit Price | 数量 | Discount |
|---|---|---|---|---|---|---|
| 1 | 1 | 构建自己的键盘 | 1.2 | $77.95 | 9 | 5% |
| 2 | 1 | 官僚非动作人物 | 2 | $78.88 | 4 | 7.5% |
| 3 | 2 | 计算机极客的练习! The DVD! | 7 | $14.88 | 6 | 4% |
| 4 | 2 | 神奇的计算机芯片 | 4 | $32.65 | 8 | 0 |
| 5 | 2 | 计算机极客和神话生物 | 6 | $78.50 | 4 | 0 |
| 6 | 3 | 访问! 游戏! | 5 | $22.95 | 5 | 15% |
| 7 | 4 | 程序员活动人偶 | 1 | $12.95 | 2 | 6% |
| 8 | 4 | 终极飞行披萨 | 8 | $36.75 | 8 | 4% |
| 9 | 5 | 外部 5.25 英寸软盘驱动器 (1/4 比例) | 9 | $65.00 | 4 | 10% |
| 10 | 6 | 关系数据库关系图 | 3 | $22.50 | 1.2 | 6.5% |
| 11 | 7 | 阴郁 | 11 | $53.33 | 6 | 8% |
| 1.2 | 7 | 关系数据库关系图 | 3 | $22.50 | 4 | 9% |
以下步骤假定“订单”表中的“产品 ID”字段与“订单详细信息”表之间存在一对多关系,而“订单”表位于关系的“一”侧。
创建总计查询
在“创建”选项卡上的“查询”组中,单击“查询设计”。
选择要使用的表,然后单击“ 添加”。 每个表都显示为查询设计器上半部分的一个窗口。 如果使用之前列出的示例表,则添加“产品”和“订单详细信息”表。
双击要在查询中使用的表字段。 通常,只向查询添加组字段和值字段。 但是,可以使用计算而不是值字段 — 后续步骤将介绍如何执行此操作。
将“产品”表中的“类别”字段添加到设计网格。
通过在网格的第二列中键入以下表达式,创建计算每笔交易销售额的列:
Total Sales Value: (1-[Order Details].[Discount]/100)*([Order Details].[Unit Price]*[Order Details].[Quantity])确保在表达式中引用的字段是“数字”或“货币”数据类型。 如果引用其他数据类型的字段,Access 会在尝试切换到数据表视图时显示 “条件表达式中的数据类型不匹配 ”错误消息。在 “查询设计 ”选项卡的“ 显示/隐藏 ”组中,单击 “总计”。 “ 总计 ”行显示在设计网格中,在该行中, “分组依据 ”显示在第一列和第二列中。
在第二列中,将“ 总计 ”行中的值更改为 “总和”。 Sum 函数将对各个销售数字求和。
单击 “运行” 以运行查询并在数据表视图中显示结果。
保持查询处于打开状态,以便在下一节中使用。 将条件用于总计查询 您在上一节中创建的查询包括基础表中的所有记录。 在计算总计时,它不排除任何订单,并且显示所有类别的总计。 如果您需要排除某些记录,可以向查询中添加条件。 例如,您可以忽略低于 $100 的交易或仅计算某些产品类别的总计。 本节中的步骤说明如何使用三种类型的条件:
计算总计时忽略某些组的条件。 例如,你将仅计算“视频游戏”、“艺术与框架”和“体育”类别的总数。
在计算某些总计后隐藏这些总计的条件。 例如,可以仅显示大于 $150,000 的总计。
将单个记录排除在总计中的条件。 例如,当) (
Unit Price * Quantity价值低于 100 美元时,可以排除单个销售交易。 以下步骤说明如何逐一添加条件并查看对查询结果的影响。 向查询添加条件在“设计”视图中打开上一部分中的查询。 为此,请右键单击查询的文档选项卡,然后单击 “设计视图”。 -或- 在导航窗格中,右键单击查询,然后单击“ 设计视图”。
在“类别 ID”列的“ 条件 ”行中键入
=Dolls Or Sports or Art and Framing。单击 “运行” 以运行查询并在数据表视图中显示结果。
切换回“设计”视图,然后在“总销售值”列的 “条件 ”行中键入
>100。运行查询以查看结果,然后切换回设计视图。
现在添加条件以排除小于 $100 的单个销售交易记录。 为此,您需要添加另一列。
注意
不能在“总销售值”列中指定第三个条件。 在此列中指定的任何条件都适用于总值,而不适用于单个值。
将表达式从第二列复制到第三列。
在新列的“ 总计 ”行中,选择“ 位置 ”,然后在 “条件 ”行中键入
>20。运行查询以查看结果,然后保存查询。
注意
下次在设计视图中打开查询时,你可能会注意到设计网格中的细微变化。 在第二列中, “字段” 行中的表达式将显示为 Sum 函数内,“ 总计 ”行中的值显示为 表达式 而不是 Sum。
Total Sales Value: Sum((1-[Order Details].Discount/100)*([Order Details].Unitprice*[Order Details].Quantity))您还将看到第四列。 此列是第二列的副本,但在第二列中指定的条件实际上显示为新列的一部分。
使用交叉表查询对多个组的数据求和
交叉表查询是一种特殊类型的查询,它以类似于 Excel 工作表的网格形式显示其结果。 交叉表查询汇总值,然后按两组事实对它们进行分组 — 一组设置在一组行标题 () 侧,另一组设置在一组列标题 (顶部) 。 此图演示示例交叉表查询的结果集的一部分:
继续时,请记住,交叉表查询并不总是填充结果集中的所有字段,因为查询中使用的表并不总是包含每个可能数据点的值。
创建交叉表查询时,通常包括多个表中的数据,并且始终包括三种类型的数据:用作行标题的数据、用作列标题的数据以及要求和或以其他方式计算的值。
本节中的步骤假定下表:
订单表
| 订单日期 | 发货日期 | Ship City | 运费 |
|---|---|---|---|
| 11/14/2005 | 11/15/2005 | Jakarta(雅加达) | $55.00 |
| 11/14/2005 | 11/15/2005 | 悉尼 | $76.00 |
| 11/16/2005 | 11/17/2005 | 悉尼 | $87.00 |
| 11/17/2005 | 11/18/2005 | Jakarta(雅加达) | $43.00 |
| 11/17/2005 | 11/18/2005 | 巴黎 | $105.00 |
| 11/17/2005 | 11/18/2005 | 斯图加特 | $112.00 |
| 11/18/2005 | 11/19/2005 | 维也纳 | $215.00 |
| 11/19/2005 | 11/20/2005 | 迈阿密 | $525.00 |
| 11/20/2005 | 11/21/2005 | 维也纳 | $198.00 |
| 11/20/2005 | 11/21/2005 | 巴黎 | $187.00 |
| 11/21/2005 | 11/22/2005 | 悉尼 | $81.00 |
| 11/23/2005 | 11/24/2005 | Jakarta(雅加达) | $92.00 |
“订单详细信息”表
| 订单 ID | 产品名称 | 产品 ID | Unit Price | 数量 | Discount |
|---|---|---|---|---|---|
| 1 | 构建自己的键盘 | 1.2 | $77.95 | 9 | 5% |
| 1 | 官僚非动作人物 | 2 | $78.88 | 4 | 7.5% |
| 2 | 计算机极客的练习! The DVD! | 7 | $14.88 | 6 | 4% |
| 2 | 神奇的计算机芯片 | 4 | $32.65 | 8 | 0 |
| 2 | 计算机极客和神话生物 | 6 | $78.50 | 4 | 0 |
| 3 | 访问! 游戏! | 5 | $22.95 | 5 | 15% |
| 4 | 程序员活动人偶 | 1 | $12.95 | 2 | 6% |
| 4 | 终极飞行披萨 | 8 | $36.75 | 8 | 4% |
| 5 | 外部 5.25 英寸软盘驱动器 (1/4 比例) | 9 | $65.00 | 4 | 10% |
| 6 | 关系数据库关系图 | 3 | $22.50 | 1.2 | 6.5% |
| 7 | 阴郁 | 11 | $53.33 | 6 | 8% |
| 7 | 关系数据库关系图 | 3 | $22.50 | 4 | 9% |
以下步骤说明了如何创建按城市对总销售额进行分组的交叉表查询。 该查询使用两个表达式返回带格式的日期和销售总额。
创建交叉表查询
- 在“创建”选项卡上的“查询”组中,单击“查询设计”。
- 双击要在查询中使用的表。 每个表都显示为查询设计器上半部分的一个窗口。 如果使用示例表,请双击“订单”表和“订单详细信息”表。
- 双击要在查询中使用的字段。 每个字段名称都显示在设计网格的 “字段” 行的空白单元格中。 如果使用示例表,请添加“订单”表中的“发货城市”和“发货日期”字段。
- 在“ 字段” 行的下一个空白单元格中,复制并粘贴或键入以下表达式:
Total Sales: Sum(CCur([Order Details].[Unit Price]*[Quantity]*(1-[Discount])/100)*100) - 在 “查询设计 ”选项卡的 “查询类型 ”组中,单击 “交叉表”。 “ 总计 ”行和“ 交叉表 ”行显示在设计网格中。
- 单击“城市”字段中“ 总计 ”行中的单元格,然后选择“ 分组依据”。 对“发货日期”字段执行相同操作。 将“总销售额”字段的 “总计 ”单元格中的值更改为 “表达式”。
- 在 “交叉表 ”行中,将“城市”字段中的单元格设置为“ 行标题”,将“发货日期”字段设置为“ 列标题”,并将“总销售额”字段设置为 “值”。
- 在 “查询设计 ”选项卡的 “结果 ”组中,单击 “运行”。 查询结果将显示在数据表视图中。
聚合函数引用
下表列出并描述了 Access 在“总计”行和查询中提供的聚合函数。 请记住,Access 为查询提供的聚合函数多于为“总计”行提供的聚合函数。
| 功能 | 说明 | 适用的数据类型 |
|---|---|---|
| 平均值 | 计算某列的平均值。 列中必须包含数值、货币或日期/时间数据。 该函数会忽略空值。 | 数字、货币、日期/时间 |
| 计数 | 对列中的项数进行计数。 | 除复杂重复的标量数据外的所有数据类型,如多值列表的列。 有关多值列表的详细信息,请参阅 创建或删除多值字段一文。 |
| 最大值 | 返回具有最大值的项。 对于文本数据,最高值是最后一个字母值 - Access 忽略大小写。 该函数会忽略空值。 | 数字、货币、日期/时间 |
| 最小值 | 返回具有最小值的项。 对于文本数据,最小值是第一个字母值 - Access 忽略大小写。 该函数会忽略空值。 | 数字、货币、日期/时间 |
| 标准偏差 | 计算值与平均值(均值)相差的程度。 有关使用此函数的详细信息,请参阅 文章在数据表中显示列总计。 |
数字、货币 |
| 合计 | 累加列中各项的值。 仅适用于数值和货币数据。 | 数字、货币 |
| 方差 | 计算列中所有值的统计方差。 该函数仅可用于数值和货币数据。 如果表包含的行少于两行,Access 返回 null 值。 有关方差函数的详细信息,请参阅 文章在数据表中显示列总计。 |
数字、货币 |