1

多数の場所をクエリして測定値を取得するクロス集計クエリがあります。測定値をピボットして、各行の位置/日付の組み合わせのすべての測定値を含むテーブルを取得します。これは、すべてのデータを取得するために正常に機能します。また、フィールドごとに1つの値でフィルタリングする場合にも正常に機能します。つまりWHERE LocationID = ? AND MeasureID = ?、私が本当に必要としているのは、WHERE LocationID IN (?) AND MeasureID IN (?)どこにあるようなものを持っていることですか?配列(または仕事を成し遂げるものは何でも。これは可能ですか?

私のフォームでは、DAO.QueryDefオブジェクトを使用してレコードセットを構築しています。可能であれば、クエリ文字列全体をVBAで作成することは避けたいと思います。これは主に、この特定のクエリがかなり長く、コードモジュールではなくビューに存在するためです。そうは言っても、すべてをVBAで構築できますが、それは望ましいソリューションではありません。

4

1 に答える 1

1

いつでもreplaceを使用できます。

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 に答える