在Access中的参数化交叉表查询中使用IN语句

时间:2012-07-23 14:02:04

标签: ms-access parameters crosstab

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

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

1 个答案:

答案 0 :(得分: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

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