我对基于包含子查询的查询的交叉表查询有疑问。查询本身工作正常,但是当我在交叉表查询中使用它时,我收到一条与无法识别的字段名称相关的错误消息,并指向子查询中使用的字段。奇怪的是,我可以毫无问题地在此查询上定义数据透视表或数据透视图。
因此,查询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-Access v.14,是 MS-Office 2010 的一部分
- 编辑 -
我设法通过用返回第一次测量日期的 VBA 函数替换子查询来使事情正常进行。尽管如此,这个解决方案还是不太好,因为交叉表查询的性能损失很大(有或没有计算字段)。奇怪的是查询本身具有与 VBA 函数或等效子查询相当的性能......