MS Access- 在多值字段中查询多个答案?
MS Access- Query for multiple answers in a Multi-Value Field?
我是 Stack Overflow 的新手,但我想我已经彻底搜索过这个问题的答案,所以我希望它不会重复。我也是 Access 和 SQL 的新手,所以请多多包涵!我边走边学。
我们创建了一个教育项目数据库,其中包含许多显示为带有复选框的下拉列表的“多值字段”。我希望我们事先知道这些不是 Access 的最佳功能,但这是我们拥有的数据,因此我们将不得不使用它。
我的问题是,在查询中如何指示选中多个框的条件?
例如,我想 select 并计算在“源”字段中选中多个框的所有记录——这意味着这些程序中有多少出现在我们查看的多个列表中?
这些值都是字符串。我也开始明白,它们每个都有一个基础数值,Access 将它们编码为,但我不知道如何找出这些不同查找的值。此外,我们所有的数据都存储在一个 table 中,没有任何其他链接的 table。
例如:
SELECT [Database Source].Value
FROM [Database]
WHERE ([Database Source].Value = **TWO OR MORE VALUES**)
我只是想不通指示两个或更多值的条件语法是什么。到目前为止,我唯一的方法是为每个组合创建组合:
WHERE ([Database Source].Value = Source 1 AND Source 2) OR ([Database Source].Value = Source 1 AND Source 3) OR *(And so on)*
我希望有一种比输入所有可能的组合更有效的方法。
非常感谢任何指导。谢谢!
好的,如果我没理解错的话,"Database" 是你的 table 的名称,"Database Source" 是你的多值字段。 (我必须指出,在这种情况下,数据库对于 table 来说是一个非常混乱的名称,因为它使 sql 看起来像我们指的是数据库属性)
您的多值字段基本上是以一种奇怪的巫术方式抽象出一对多关系。您的 [Database Source] 包含一个 ID 列表,并且该 ID 与另一个具有您的可能值的 table 相关联。如果您在查询中引用 [Database Source].value,那么您会将多值分成单独的行,因此您不想这样做。
在我看来,您的列中需要有另一个字段作为分组依据。如果您有可用的 ID 列。
SELECT Database.[field x],Database.[Database Source]
FROM Database
GROUP BY [field x]
Having Count(Database.[Database Source]) > 1;
首先,根据您选择的值构建一个字符串。然后,在 "IN" 子句中使用该字符串。像这样:
Dim strSQL as String
Dim vItm as Variant
Dim rec As DAO.Recordset
For Each vItm In Me!Listbox.ItemsSelected
strSQL = strSQL & ListBox.Column(0, vItm) & ","
Next vItm
strSQL = left(strSQL,len(strSQL) - 1) ' remove last comma
Set rec = CurrentDb.OpenRecordset("Select * FROM MyTableName " _
WHERE MyFieldName In (" & strSQL & ")")
我不确定你的列表框中的哪一列实际上包含你要搜索的值,如果我知道填充你的列表框的代码我可以更具体但上面的代码假定你的值在第一个柱子。 Columns 集合是从零开始的,所以 Column(0) 是第一列,Column(1) 是第二列,等等...
我是 Stack Overflow 的新手,但我想我已经彻底搜索过这个问题的答案,所以我希望它不会重复。我也是 Access 和 SQL 的新手,所以请多多包涵!我边走边学。
我们创建了一个教育项目数据库,其中包含许多显示为带有复选框的下拉列表的“多值字段”。我希望我们事先知道这些不是 Access 的最佳功能,但这是我们拥有的数据,因此我们将不得不使用它。
我的问题是,在查询中如何指示选中多个框的条件?
例如,我想 select 并计算在“源”字段中选中多个框的所有记录——这意味着这些程序中有多少出现在我们查看的多个列表中?
这些值都是字符串。我也开始明白,它们每个都有一个基础数值,Access 将它们编码为,但我不知道如何找出这些不同查找的值。此外,我们所有的数据都存储在一个 table 中,没有任何其他链接的 table。
例如:
SELECT [Database Source].Value
FROM [Database]
WHERE ([Database Source].Value = **TWO OR MORE VALUES**)
我只是想不通指示两个或更多值的条件语法是什么。到目前为止,我唯一的方法是为每个组合创建组合:
WHERE ([Database Source].Value = Source 1 AND Source 2) OR ([Database Source].Value = Source 1 AND Source 3) OR *(And so on)*
我希望有一种比输入所有可能的组合更有效的方法。
非常感谢任何指导。谢谢!
好的,如果我没理解错的话,"Database" 是你的 table 的名称,"Database Source" 是你的多值字段。 (我必须指出,在这种情况下,数据库对于 table 来说是一个非常混乱的名称,因为它使 sql 看起来像我们指的是数据库属性)
您的多值字段基本上是以一种奇怪的巫术方式抽象出一对多关系。您的 [Database Source] 包含一个 ID 列表,并且该 ID 与另一个具有您的可能值的 table 相关联。如果您在查询中引用 [Database Source].value,那么您会将多值分成单独的行,因此您不想这样做。
在我看来,您的列中需要有另一个字段作为分组依据。如果您有可用的 ID 列。
SELECT Database.[field x],Database.[Database Source]
FROM Database
GROUP BY [field x]
Having Count(Database.[Database Source]) > 1;
首先,根据您选择的值构建一个字符串。然后,在 "IN" 子句中使用该字符串。像这样:
Dim strSQL as String
Dim vItm as Variant
Dim rec As DAO.Recordset
For Each vItm In Me!Listbox.ItemsSelected
strSQL = strSQL & ListBox.Column(0, vItm) & ","
Next vItm
strSQL = left(strSQL,len(strSQL) - 1) ' remove last comma
Set rec = CurrentDb.OpenRecordset("Select * FROM MyTableName " _
WHERE MyFieldName In (" & strSQL & ")")
我不确定你的列表框中的哪一列实际上包含你要搜索的值,如果我知道填充你的列表框的代码我可以更具体但上面的代码假定你的值在第一个柱子。 Columns 集合是从零开始的,所以 Column(0) 是第一列,Column(1) 是第二列,等等...