2013-09-19 4 views
0

У меня проблема с кросс-табличным запросом на основе запроса, который содержит подзапрос. Сам запрос работает нормально, но когда я использую его в запросе кросс-таблицы, я получаю сообщение об ошибке, связанное с именем нераспознанного поля, и указывая на поле, используемое в подзапросе. Странно то, что я могу без труда определить сводную таблицу или сводную диаграмму по этому запросу.ms-access crosstab запрос на основе запроса, содержащего подзапрос

Таким образом, запрос 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, который сам по себе работает.

Любая идея?

NB: У меня есть V.14 Ms-Access, часть MS-Office 2010

- EDIT -

мне удается получить вещи работать, заменяя подзапрос с помощью функции VBA который возвращает дату первого измерения. Это решение, тем не менее, не слишком хорошо, потому что потеря производительности кросс-таблицы огромна (с или без вычисленного поля). Странно то, что сам запрос имеет сопоставимые характеристики с функцией VBA или эквивалентным подзапросом ...

+0

Вы пытались переместить содержимое запроса mainMeas прямо в запрос кросс-таблицы? – DHW

+0

Привет, @ DHW, спасибо, что помогли мне! Я попробовал ваше предложение (т.что я понял об этом: в основном заменяя предложения SELECT и FROM кросс-таблицы запросами тегов TestqryMeasurement и делая необходимые корректировки). К сожалению, я все равно получаю такое же сообщение об ошибке! – jxrossel

+0

Извините - я далеко от доступа, поэтому я не могу набрать рабочий запрос для вас. Но попробуйте это .. # 1: сделайте один запрос, который имеет три поля (idTest, idMovement и MeasDate). Группируйте по двум полям id и min поле MeasDate. Вызовите этот запрос «SubMeas». # 2 Создайте новый запрос, в котором tblMeasurement и SubMeas добавлены в качестве таблиц в запрос. Присоединитесь к двум таблицам с полями idTest и idMovement. Добавьте все поля tblMeasurement, которые вам нужны, и добавьте в поле MinOfMeasDate. Теперь вы можете изменить этот запрос на запрос типа кросс-таблицы и получить результаты, которые вы после. – DHW

ответ

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); 

3) Ввод в перекрестный запрос на qryMeasurement как сделано в вопросе post.

Еще раз спасибо ГВС!

Смежные вопросы