1

我有一个交叉表查询,它查询一堆位置并获取它们的测量读数。我以测量读数为中心,所以我得到一个表格,其中包含每行上位置/日期组合的所有测量值。这适用于获取所有数据。它也适用于过滤每个字段的一个值。即WHERE LocationID = ? AND MeasureID = ?,但我真正需要的是拥有类似WHERE LocationID IN (?) AND MeasureID IN (?)where 的东西?是一个数组(或任何可以完成的工作。这可能吗?

在我的表单上,我使用 DAO.QueryDef 对象来构建我的记录集。如果可能的话,我想避免在 VBA 中构建整个查询字符串,主要是因为这个特定的查询很长,我宁愿它存在于视图中而不是代码模块中。话虽如此,我可以在 VBA 中构建它,但这不是所需的解决方案。

4

1 回答 1

1

您始终可以使用替换。

sSQL = "SELECT lots of sql WHERE LocationID IN (qqlocidqq)"
sSQLWithLoc = Replace (sSQL, "qqlocidqq", "1,2,3,4")

Dim qdf As QueryDef

'A query that exists
Set qdf= CurrentDB.QueryDefs("MyJunkQuery")
'Permanently change the sql of that query
qdf.SQL = sSQLWithLoc 

进一步研究一下,它可能适合您使用 Instr,如下所示:

SELECT Table1.LocationID
FROM Table1
WHERE InStr([@List],[LocationID])>0

像这样测试:

PARAMETERS Number_List Text(50);
TRANSFORM Count(Table1.AKey) AS CountOfAKey
SELECT Table1.AText
FROM Table1
WHERE InStr([Number_List],[ANumber])>0
GROUP BY Table1.AText
PIVOT Table1.ANumber;

其中 Table1 由字段 AKey、AText 和 ANumber 组成。Number_List 是由参数提供的以逗号分隔的数字列表。Instr 检查提供的参数中是否存在来自 Table1 的 ANumber。

重叠 1,2,12 存在问题,但创造性地使用逗号可能适合:

WHERE InStr("," & [Number_List] & "," , "," & [ANumber] & ",")>0

当然,分隔符不必是逗号,| 经常有用。

于 2012-07-23T14:05:51.350 回答