在查询中使用多值字段

2017-09-23 21:28:00
微软
转贴
154

在查询中使用多值字段

在 Microsoft Office Access 2007 中,您可以创建可存放多个值的字段,例如分配了问题的人员的列表。多值字段非常适合于某些情况,例如,当您使用 Office Access 2007 来处理存储在 Windows SharePoint Services 3.0 列表中的信息,并且该列表所包含的某个字段使用的是 Windows SharePoint Services 3.0 中可用的其中一种多值字段类型时。

本文讨论多值字段以及如何在查询中使用多值字段。

本文内容

什么是多值的字段?

查询简介

显示在查询中的多值的字段

在多值字段中显示单个值

了解绑定的值和显示值的查阅字段中

如何在查询中显示的绑定的值

多值字段中输入简单查询条件

搜索多值字段中的多个值

了解包括的影响。在字段列表中的值字段

计数、 分组和使用其他聚合函数

使用多值字段的追加查询

多值字段中使用更新查询

删除查询中使用多值字段

返回页首

什么是多值字段?

假设您有一项任务要分配给某个雇员或承包商,但您认为需要将它分配给多个人员。在 Office Access 2007 中,您可以创建一个多值字段,这样就可从列表中选择人员。

多值字段

单击组合框时,复选框显示为选中状态以指示您的选择。您可以选中或清除列表中的项目,然后单击“确定”提交您的选择。

多值字段组合框

所选的人员将存储在多值字段中,并在显示时用逗号分隔(默认情况下)。

用逗号分隔值的多值字段

多值字段背后的理念是使您在选择并存储多个选项等情况下能够轻松地提供支持,而无需创建更高级的数据库设计。多值字段对于与 Windows SharePoint Services 的集成也很重要,因为 SharePoint 列表也支持多值字段。

您可能想知道为什么 Office Access 2007 允许您在一个字段中存储多个值,而大多数关系数据库管理系统禁止这样做。答案是:Office Access 2007 中的数据库引擎并不真正将多个值存储在一个字段中。即使您看到和使用的似乎是一个字段,但这些值实际上单独存储,并且在一个隐藏的系统表中进行管理。Access 数据库引擎会帮您处理这些工作,自动分隔数据并将它们重新收集在一起,就像它们是在一个字段中。

从技术角度来说,Access 多值字段建立了一个多对多关系模型。例如,考虑一个事件表,您可以在其中将每个事件的责任分配给一个或多个雇员。假设您创建一个名为“分配给”的多值字段,用于将事件分配给雇员。事件和雇员之间是多对多的关系。也就是说,您可以将许多雇员分配给任何一个事件,也可以将任何一个雇员分配给许多事件。

返回页首

查询简介

数据库的主要用途是提供信息:“我公司最畅销的产品是什么?谁是我们的最佳客户?我公司在哪些方面没有达到销售目标?”。您可以从设计完善的数据库中找到所有这些问题的答案。要从 Access 数据库中得到答案,您可以创建一个查询并输入所需的条件。查询值的数据可用来自一个或多个表。在 Access 检索到解答问题的数据后,您可以查看和分析这些数据。在创建了查询后,您可以将该查询作为窗体、报表、图形甚至其他查询的基础。

Office Access 2007 允许您在某些查询中通过特定方式使用多值字段。您可以在查询中显示多值字段,在查询内的多值字段中显示单个值以及使用多值字段执行某些选定的聚合运算和动作查询。

返回页首

在查询中显示多值字段

在查询中显示多值字段时,您必须决定是要显示包含由逗号分隔的所有值的整个多值字段,还是显示每个值的单独行。例如,假设您有一个“问题”表,其中包含用于向人员分配事件的“分配给”字段。您可以使用以下步骤构建一个包含“分配给”字段的查询:

  1. 单击“Microsoft Office 按钮” Office 按钮图像 ,然后单击“打开”。

  2. “打开”对话框中,选择并打开数据库。

  3. “创建”选项卡上的“其他”组中,单击“查询设计”

    Access 功能区图像

  4. “显示表”对话框中,单击包含多值字段的表(在本例中为“问题”表),然后单击“添加”

  5. 单击“关闭”

  6. 将要使用的字段拖动到查询设计网格。在本例中,将“标题”字段和名为“分配给”的多值字段拖动到查询网格。

  7. “设计”选项卡上的“结果”组中,单击“运行”

您的查询结果将如下图中所示:第一列显示问题标题,第二列显示多值字段: 

显示“标题”和“分配给”字段的查询结果

在使用设计视图创建查询时,Access 会自动生成相应的 SQL(结构化查询语言)语句。SQL 是 Access 使用的查询语言。可以使用以下步骤切换到 SQL 视图来查看 SQL 语句。

  1. “设计”选项卡上的“结果”组中,单击“视图”下的箭头以显示“视图”菜单。

  2. 单击“SQL 视图”

该 SQL 语句类似以下形式:

SELECT Issues.Title, 
Issues.AssignedTo
FROM Issues;

返回页首

在多值字段中显示单个值

假设您要查看展开的(有时称为平展的)“分配给”多值字段,以使每个名称或“分配给”值显示在单独的行中。为此,您需要通过在“字段”行中向“分配给”追加字符串“.Value”来指定 Value 属性,如下面的查询网格中所示:

显示“标题”和“分配给.值”的查询网格

如果在“字段”行中指定分配给,当您运行查询时,Access 将只在一行中显示多值字段中的所有值。但是,当您使用 Value 属性(如在 AssignedTo.Value 中)时,Access 将以展开的形式显示多值字段,以使每个值都显示在单独的行中。可以使用以下步骤创建查询来显示单个值。

  1. 单击“Microsoft Office 按钮” Office 按钮图像 ,然后单击“打开”。

  2. “打开”对话框中,选择并打开数据库。

  3. “创建”选项卡上的“其他”组中,单击“查询设计”

    Access 功能区图像

  4. “显示表”对话框中,单击包含多值字段的表(在本例中为“问题”表),然后单击“添加”

  5. 单击“关闭”

  6. 将要使用的字段(在本例中为名为“分配给.值”的多值字段)拖动到查询网格。

  7. “设计”选项卡上的“结果”组中,单击“运行”

显示“标题”和每个“分配给”值的查询结果

在使用设计视图创建查询时,Access 会自动生成相应的 SQL(结构化查询语言)语句。SQL 是 Access 使用的查询语言。可以使用以下步骤切换到 SQL 视图来查看 SQL 语句。

  1. “设计”选项卡上的“结果”组中,单击“视图”下的箭头以显示“视图”菜单。

  2. 单击“SQL 视图”

该 SQL 语句类似以下形式:

SELECT Issues.Title, 
Issues.AssignedTo.Value
FROM Issues;

返回页首

了解查阅字段中的绑定值和显示值

多值字段是查阅字段。查阅字段是表中的一个字段,其中的值是从另一个表或查询中或者从值列表中检索而来的。Access 已在许多版本中支持单值查阅字段。多值查阅字段对于 Office Access 2007 是新内容。查阅字段的目的是用姓名等更有意义的内容替换 ID(或其他外键值)等显示内容。例如,Access 可以显示联系人姓名,而不显示联系人 ID 号。联系人 ID 号是绑定值。系统会在源表或查询中自动查找联系人 ID 号,并用联系人姓名进行替换。联系人姓名是显示值。

与具有显示值和绑定值的单值查阅字段相似,多值查阅字段的显示值显示在用户界面上,而绑定值存储在表中。对于多值字段中的每一项,显示值基于绑定值进行“查阅”。

这意味着 Access 显示的所找到的显示值经常与字段中所存储的绑定值不同。例如,在前面的使用“分配给”字段的示例中,来自“联系人扩展信息”查询的一组雇员 ID 值存储在“分配给”字段中。在创建多值字段时,“联系人扩展信息”查询被选中作为“行来源”。

这些雇员 ID 是绑定值。但是,由于“分配给”字段是查阅字段,因此 Access 在查询结果中显示一组查阅到的值,在此例为联系人姓名。联系人姓名是显示值。 

带有显示显示值的数据表与显示绑定值的数据表

1. 显示值。

2. 绑定值。

可以在设计视图中查看多值字段的“查阅”属性。方法如下:

  1. 单击“Microsoft Office 按钮” Office 按钮图像 ,然后单击“打开”。

  2. “打开”对话框中,选择并打开数据库。

  3. 在导航窗格中,右键单击存储多值字段的表。

  4. 单击“设计视图”

  5. 单击多值字段(例如,单击“分配给”)。

  6. “字段属性”下,单击“查阅”选项卡。

多值查阅字段属性

了解查阅字段的显示值及其绑定值之间的差别非常重要。默认情况下,显示值自动显示在数据表视图中。但绑定值是存储的值以及在查询条件中使用的值,并且是 Access 默认情况下在与其他表的联接中使用的值。

返回页首

如何在查询中显示绑定值

默认情况下,显示值自动显示在数据表视图中。在创建查询时,可以取代此行为以便显示绑定值。以下是您要采取的步骤:

  1. 单击“Microsoft Office 按钮” Office 按钮图像 ,然后单击“打开”。

  2. “打开”对话框中,选择并打开数据库。

  3. “创建”选项卡上的“其他”组中,单击“查询设计”

    Access 功能区图像

  4. “显示表”对话框中,单击包含多值字段的表(在本例中为“问题”表),然后单击“添加”

  5. 单击“关闭”

  6. 将要使用的字段拖动到查询设计网格。在本例中,将“标题”字段和名为“分配给”的多值字段拖动到查询网格。

  7. 在查询网格内的“AssignedTo.Value”字段中单击,以使焦点位于该字段中。

  8. “设计”选项卡上的“显示/隐藏”组中,单击“属性表”

  9. 在“属性表”中,在“查阅”选项卡上的“显示控件”属性中,选择“文本框”

查询设计中的“显示控件”属性

在将“显示控件”属性更改为“文本框”时,会禁用常规的查阅列行为,以便显示绑定值而不是显示值。

查询结果中显示的绑定值

返回页首

为多值字段输入简单查询条件

假设您要查看分配给“王凯利”的问题。可以在查询网格内的“条件”行中输入查询条件,但在为查阅字段输入条件时,必须输入绑定值而非显示值。在本例中,您确定王凯利的绑定值是 6。该值是“联系人扩展信息”查询中凯利的主键值。

创建一个查询,显示分配给凯利的问题:

  1. 单击“Microsoft Office 按钮” Office 按钮图像 ,然后单击“打开”。

  2. “打开”对话框中,选择并打开数据库。

  3. “创建”选项卡上的“其他”组中,单击“查询设计”

    Access 功能区图像

  4. “显示表”对话框中,单击包含多值字段的表(在本例中为“问题”表),然后单击“添加”

  5. 单击“关闭”

  6. 将要使用的字段拖动到查询网格。在本例中,将“标题”拖动到网格中的第一列。然后,将“分配给”拖动到第二列。

  7. 在该查询网格选项卡上,在“分配给”下的“条件”行中,输入“6”。请注意,您输入的是绑定值而非显示值。

    多值字段中具有条件的查询网格

  8. “设计”选项卡上的“结果”组中,单击“运行”以运行查询。

在运行查询时,结果显示在数据表视图中。请注意,该查询仅返回出现“王凯利”的行。

“分配给”值包含 6 的查询结果

在使用设计视图创建查询时,Access 会自动生成相应的 SQL(结构化查询语言)语句。SQL 是 Access 使用的查询语言。可以使用以下步骤切换到 SQL 视图来查看 SQL 语句。

  1. “设计”选项卡上的“结果”组中,单击“视图”下的箭头以显示“视图”菜单。

  2. 单击“SQL 视图”

该 SQL 语句类似以下形式:

SELECT Issues.AssignedTo
FROM Issues
WHERE (((Issues.AssignedTo.Value)=6));

搜索文本而非 ID 号

如果发现输入 ID 号比较麻烦,而希望输入姓名“王凯利”作为搜索条件,该怎样做?为使其正常运行,查询结果中必须具有一个包含文本姓名的字段。这样,就可以在该字段中搜索“王凯利”了。

由于“AssignedTo.Value”字段的绑定值是 ID,您不能使用该字段,因此必须输入 ID 来筛选该字段。

在本例中,联系人姓名字段不是位于表中,而是位于为“分配给”多值字段提供数据的源查询中。可以将该多值字段的源表或查询与包含该多值字段的表相联接,以在查询结果中包括源表或查询中的字段(本例中为联系人姓名)。然后,可以搜索该字段而非多值字段。

  1. 单击“Microsoft Office 按钮” Office 按钮图像 ,然后单击“打开”。

  2. “打开”对话框中,选择并打开数据库。

  3. “创建”选项卡上的“其他”组中,单击“查询设计”

    Access 功能区图像

  4. “显示表”对话框中,单击包含多值字段的表(在本例中为“问题”表),然后单击“添加”

  5. “显示表”对话框中,单击“查询”选项卡,单击作为多值字段源的查询(本例中为“联系人扩展信息”),然后单击“添加”

  6. 单击“关闭”

  7. 将要使用的字段拖动到查询网格。在本例中,将“标题”从“问题”表拖动到网格中的第一列。然后,将“联系人姓名”从“联系人扩展信息”查询拖动到第二列,并清除“显示”复选框。接下来,将“分配给”拖动到第三列。

  8. 如果“联系人扩展信息”查询中的“ID”字段和“AssignedTo.Value”字段之间的联接线不可见(如下所示),请在“联系人扩展信息”查询内的“ID”字段中单击,并拖动到“问题”表中的“AssignedTo.Value”字段。

    将出现联接线。

    如果任何其他联接线可见,请删除它们。要删除联接线,请单击该联接线以使其突出显示,然后按 Delete。

  9. 在查询窗格中,在“联系人姓名”下的“条件”行中,输入“王凯利”

    查询网格中的“分配给”条件中包含“王凯利”

  10. “设计”选项卡上的“结果”组中,单击“运行”以运行查询。

在运行查询时,结果显示在数据表视图中。请注意,查询结果只显示出现“王凯利”的行。由于源表或查询中的 ID 和“AssignedTo.Value”字段为多值字段中的每个值返回一个单独的行,并且每行仅包含一个带有全名的“联系人姓名”字段,因此该技术能够起作用。因为“联系人姓名”是计算字段而非查阅字段,所以没有绑定值和显示值。只有一个值,即联系人姓名。因此,可以提供要匹配的文本,在本例中为“王凯利”。 

查询结果中的“分配给”条件中包含“王凯利”

在使用设计视图创建查询时,Access 会自动生成相应的 SQL(结构化查询语言)语句。SQL 是 Access 使用的查询语言。可以使用以下步骤切换到 SQL 视图来查看 SQL 语句。

  1. “设计”选项卡上的“结果”组中,单击“视图”下的箭头以显示“视图”菜单。

  2. 单击“SQL 视图”

该 SQL 语句类似以下形式:

SELECT Issues.Title, Issues.AssignedTo 
FROM [Contacts Extended] INNER JOIN Issues ON 
[Contacts Extended].ID = Issues.AssignedTo.Value 
WHERE ((([Contacts Extended].[Contact Name])= 
"Kelly Rollin"));

返回页首

在多值字段中搜索多个值

有时候,您需要搜索对多个值的匹配。假设您要查看“王凯利”和“郭莎莎”为“分配给”字段中的值时对应的那些问题。“王凯利”的绑定值是 6,“郭莎莎”的绑定值是 10。要为一个多值字段指定几个条件,可以使用 AND 和 OR 运算符。

要创建查询,请使用以下步骤。

  1. 单击“Microsoft Office 按钮” Office 按钮图像 ,然后单击“打开”。

  2. “打开”对话框中,选择并打开数据库。

  3. “创建”选项卡上的“其他”组中,单击“查询设计”

  4. “显示表”对话框中,单击包含多值字段的表(在本例中为“问题”表),然后单击“添加”

  5. 单击“关闭”

  6. 将要使用的字段拖动到查询网格。在本例中,将“标题”拖动到网格中的第一列。然后,将“分配给”拖动到第二列。

  7. 在查询网格中,在“分配给”下的“条件”行中,键入“6 And 10”。

    在多值字段中使用 AND 的查询

  8. “设计”选项卡上的“结果”组中,单击“运行”以运行查询。

在运行查询时,结果显示在数据表视图中。

在多值字段中使用 AND 的查询结果

结果只显示同时分配给“王凯利”和“郭莎莎”的问题。在使用设计视图创建查询时,Access 会自动生成相应的 SQL(结构化查询语言)语句。SQL 是 Access 使用的查询语言。可以使用以下步骤切换到 SQL 视图来查看 SQL 语句。

分享
© 1999-2017 Office交流网   中山市天鸣科技发展有限公司 粤ICP备10043721号-5 SQL查询:18
内存占用:8.00MB
PHP 执行时间:0.3