Почему мой запрос требует больше полей в моей группе по? - PullRequest
1 голос
/ 17 июля 2009

Проблема:
Первоначально у меня был запрос, который работал отлично, но теперь я должен изменить его, чтобы получить больше полей. Когда я пытаюсь запустить новый запрос, он выбирает имя поля и говорит, что я не включил его в составную функцию. Каждый раз, когда я получаю эту ошибку, я могу добавить поле, указанное в инструкции Group By, и в сообщении об ошибке будет выбрано новое поле, которое не включено. У кого-нибудь есть идеи относительно того, как я могу получить ту же информацию, что и исходный запрос, только с большим количеством полей?

Описание работы запроса:
Запрос предназначен для получения одной записи для каждого отдельного набора readings_miu_id s и ReadDate s (Поле PremID одинаково для каждого отдельного readings_miu_id ).

Оригинальный запрос:

strSql3 = " SELECT Distinct readings_miu_id, ReadDate, PremID " & _
          "INTO analyzedCopy2 " & _
          "FROM analyzedCopy "

DoCmd.SetWarnings False
DoCmd.RunSQL strSql3
DoCmd.SetWarnings True

Новый запрос:

strSql3 = " SELECT Top 1 readings_miu_id, Reading, ReadDate,Format([MIUtime],'hh:mm:ss') AS ReadTime,MIUwindow,SN,Noise,RSSI,ColRSSI,MIURSSI,Firmware,CFGDate,FreqCorr,Active,MeterType,OriginCol,ColID,Ownage,SiteID,PremID , Neptune_prem.prem_group1, Neptune_prem.prem_group2,ReadID " & _
          "INTO analyzedCopy2 " & _
          "FROM analyzedCopy " & _
          "Group By readings_miu_id, ReadDate, PremID  " & _
          "Order By readings_miu_id, ReadDate, ReadID, PremID "

DoCmd.SetWarnings False
DoCmd.RunSQL strSql3
DoCmd.SetWarnings True

Ответы [ 3 ]

3 голосов
/ 17 июля 2009

По моему опыту (который только умеренный) каждый столбец в наборе результатов (но НЕ каждый агрегат) должен быть в группе по.

Вот достойный справочник

1 голос
/ 30 июля 2009

Это можно сделать с помощью подзапроса или двух запросов. Кроме того, «CurrentDb.Execute» является предпочтительным методом для выполнения запроса, подобного этому (вместо «DoCmd.RunSQL»).

CurrentDb.Execute strSQL3, dbFailOnError
1 голос
/ 17 июля 2009

Когда вы включаете предложение GROUP BY, каждое поле должно быть либо в GROUP BY, либо иметь к нему агрегированную функцию (например, MAX, MIN, SUM, COUNT).

Например, простой правильной реализацией может быть:

ВЫБРАТЬ Отдел, МАКС (Зарплата) ОТ сотрудников ГРУППА ПО ОТДЕЛУ

... и простая неправильная реализация будет:

ВЫБРАТЬ отдел, зарплата ОТ сотрудников GROUP BY Department.

Рассмотрим два утверждения выше. Во-первых, вы можете легко представить, как будет выглядеть источник данных и что будет возвращено. Однако, во-вторых, что бы вы вернули? Какое индивидуальное значение зарплаты вы бы вернули в свой набор результатов? Следовательно, когда вы группируете поля, каждое поле в наборе результатов должно либо участвовать в группировке, либо быть результатом агрегации значений, собранных из группы, состоящей из других полей.

...