首页 文章

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

提问于
浏览
1

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

在我的表单上我想尽可能避免在VBA中构建整个查询字符串,主要是因为这个特定的查询很长,我宁愿它生活在一个视图而不是代码模块中 . 有了这个说我可以用VBA构建它,但它不是理想的解决方案 .

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
    

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

相关问题