サブクエリを含むクエリに基づくクロス集計クエリに問題があります。クエリ自体は正常に動作しますが、クロス集計クエリで使用すると、認識されないフィールド名に関連するエラー メッセージが表示され、サブクエリで使用されているフィールドを指しています。奇妙なことに、このクエリで問題なくピボット テーブルまたはピボット チャートを定義できます。
したがって、クエリTestqryMeasurement
は次のように定義されます。
SELECT *,
(SELECT min( subMeas.MeasDate ) FROM tblMeasurement AS subMeas
WHERE subMeas.idTest = mainMeas.idTest AND subMeas.idMovement =
mainMeas.idMovement) AS FirstMeasDate,
DateDiff("d",FirstMeasDate,MeasDate) AS DaysSinceFirstMeas
FROM tblMeasurement AS mainMeas;
これは主に、特定のテストの特定の動きについて、最初の測定と現在の測定の間に費やされた時間を決定するために使用されます。このクエリを実行すると、正しい結果が得られます。
クロス集計クエリは次のように記述されます。
TRANSFORM Sum(TESTqryMeasurement.[Amplitude]) AS SumOfAmplitude
SELECT TESTqryMeasurement.[DaysSinceFirstMeas],
Sum(TESTqryMeasurement.[Amplitude]) AS [Total Of Amplitude]
FROM TESTqryMeasurement
GROUP BY TESTqryMeasurement.[DaysSinceFirstMeas]
PIVOT TESTqryMeasurement.[idMovement];
これを実行すると、次のメッセージが表示されます。
... データベース エンジンは、'mainMeas.idTest' を有効なフィールド名または式として認識しません
このフィールドはTestqryMeasurement
、単独で機能するサブクエリでのみ使用されます。
何か案が?
注意: MS-Office 2010 の一部である Ms-Access v.14 を持っています。
- 編集 -
サブクエリを、最初の測定の日付を返す VBA 関数に置き換えることで、うまく機能するようになりました。ただし、クロス集計クエリのパフォーマンスの損失が大きいため (計算フィールドの有無にかかわらず)、このソリューションはあまり良くありません。奇妙なことは、クエリ自体が VBA 関数または同等のサブクエリと同等のパフォーマンスを持っていることです...