Access грязно ругается!!! Помогите найти ошибку в запросе...

Red XIII
Дата: 21.01.2002 06:30:33
При попытке выполнить запрос Access (версия 2002 из Office XP) выводит сообщение:
"Невозможна группировка по полям, выбранным с помощью символа '*' (Поставщики)"

У меня 2 таблицы со следующими атрибутами:

----- Поставщики -----
КодПоставщика (ключ)
НаимПоставщика
Адрес
Телефон

----- Товары -----
КодПоставщика
КодТовара (ключ)
НаимТовара
СтоимостьТовара
СрокПоставки

Связь - один-ко-многим по "КодПоставщика" (один поставщик, товаров - много).

Запрос:

SELECT TOP 5 Поставщики.*, SUM(Товары.СтоимостьТовара) AS s_cst FROM Поставщики INNER JOIN Товары ON Товары.КодПоставщика=Поставщики.КодПоставщика GROUP BY (Товары.КодПоставщика)ORDER BY SUM(Товары.СтоимостьТовара) DESC;

В чем ошибка, убейте, не пойму...
ДиД.
Дата: 21.01.2002 07:48:35
Вместо Поставщики.* в запросе включите все поля из этой таблицы КодПоставщика, НаимПоставщика, Адрес, Телефон
Red XIII
Дата: 22.01.2002 06:53:06
Запрос:

SELECT TOP 5 Поставщики.КодПоставщика, Поставщики.Имя, Поставщики.Адрес, Поставщики.Телефон, SUM(Товары.Стоимость) AS s_cst
FROM Поставщики INNER JOIN Товары ON Товары.КодПоставщика=Поставщики.КодПоставщика
GROUP BY (Товары.КодПоставщика)
ORDER BY SUM(Товары.Стоимость) DESC;

(в таблице "Поставщики" я изменил имя поля "НаимПоставщика" на просто "Имя", в таблице "Товары" - "СтоимостьТовара" на "Стоимость")

Все равно не выполняется! Пишет: "Попытка выполнить запрос, который не включает указанное выражение 'КодПоставщика' как часть статистической функции или группы".

Кстати, забыл привести формулировку моей задачи: вывести пятерку самых активных (в стоимостном выражении) поставщиков. Если кто подскажет, в чем ошибка, буду очень благодарен.
BAlex
Дата: 22.01.2002 07:28:07
В общем случае всё, что перечислено в SELECT, должно повторяться и в GROUP BY.
Vasiliy2
Дата: 16.06.2010 00:16:32
>> В общем случае всё, что перечислено в SELECT, должно повторяться и в GROUP BY.

а никто не подскажет, из за чего такое ограничение?
в обычном sql его ведь нет
и как то можно его обойти?
mds_world
Дата: 16.06.2010 05:42:58
BAlex
В общем случае всё, что перечислено в SELECT, должно повторяться и в GROUP BY.
За исключением констант, внешних функций без параметров (или параметр не поле селекта) и полей к которым применены статистические функции
mds_world
Дата: 16.06.2010 05:58:42
Vasiliy2
>> В общем случае всё, что перечислено в SELECT, должно повторяться и в GROUP BY.

а никто не подскажет, из за чего такое ограничение?
в обычном sql его ведь нет
и как то можно его обойти?

Ограничение (с поправкой) есть в любом sql-подмножестве. Оно связано с понятием "группировка", очень похожим на обычную, неформализованную группу. Можно, по каким-то признакам объединить группу (людей, предметов, понятий). У группы есть групповые характеристики, например, номер или название, характеризующие группу в целом. И есть статистические, определяюшие один элемент из группы (максимум, минимум, первый, последний и т.д.), они тоже являются характеристикой группы в целом.
То, что перечисляется в Group By есть характеристики группы. И если в селекте появляется элемент, не являющийся характеристикой группы, а ее элементом, то запрос в недоумении - какой именно элемент группы надо вывести? Соответственно, выводится ошибка
alvk
Дата: 16.06.2010 07:42:24
в обычном SQL всё также, автор уток запускает.
Vasiliy2
Дата: 16.06.2010 12:28:18
ну хорошо, а как тогда поступить с такой задачей?
допустим у меня есть таблица

id | date

в колонках id уникальные значения, а вот в date бывают задвоения
мне нужно вывести id уникальных дат в этой таблице

select id from table_name group by date

такой запрос работает, например, в mysql, а вот в access выдаст ошибку. как быть?
ё
Дата: 16.06.2010 12:35:04
Vasiliy2
ну хорошо, а как тогда поступить с такой задачей?
допустим у меня есть таблица

id | date

в колонках id уникальные значения, а вот в date бывают задвоения
мне нужно вывести id уникальных дат в этой таблице

select id from table_name group by date

такой запрос работает, например, в mysql, а вот в access выдаст ошибку. как быть?


>> как быть?

сказать акцессу, какой из id выводить с "уникальной датой" - минимальный/максимальный/средний ))

...к слову, а какой выводит МуСКЛ для этого запроса ?