0

サブクエリを含むクエリに基づくクロス集計クエリに問題があります。クエリ自体は正常に動作しますが、クロス集計クエリで使用すると、認識されないフィールド名に関連するエラー メッセージが表示され、サブクエリで使用されているフィールドを指しています。奇妙なことに、このクエリで問題なくピボット テーブルまたはピボット チャートを定義できます。

したがって、クエリ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 関数または同等のサブクエリと同等のパフォーマンスを持っていることです...

4

1 に答える 1

1

答えは@DHWから提供されました。アイデアは、クエリをそれ自体のサブセットと結合することにより、サブクエリを完全に回避することです。サブセットには、目的のサブクエリの結果が含まれます。これは機能するだけでなく、サブクエリがカスタム VBA 関数の呼び出しに置き換えられたときに発生するパフォーマンスの低下を回避します。

私の場合、解決策は次のようになります。

1) クエリの定義 - qryFirstMeasDate- 各テストとムーブメントの最初の測定日を与える:

SELECT idTest, idMovement, min( MeasDate ) AS FirstMeasDate
FROM tblMeasurement
GROUP BY idTest, idMovement;

2) このクエリをメインの測定テーブルと結合して、全体的な測定クエリを取得しますqryMeasurement

SELECT tblMeasurement.*, FirstMeasDate, DateDiff("d",FirstMeasDate,MeasDate) AS   
   DaysSinceFirstMeas
FROM tblMeasurement INNER JOIN qryFirstMeasDate ON 
   (tblMeasurement.idMovement = qryFirstMeasDate.idMovement) AND 
   (tblMeasurement.idTest = qryFirstMeasDate.idTest);

qryMeasurement3)質問の投稿で行ったように、クロス集計クエリを作成します。

今後ともDHWをよろしくお願いいたします!

于 2013-10-03T12:09:30.417 に答える