|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Всем здрасссьте! Никак не уразумею, в каких случаях выдается такая ошибка? Разумеется clause у меня присутствует и в таблице существует, но ошибку выдает все равно, по какому бы полю я не группировал. А также эту ошибку выдает там, где функции GROUP BY НЕТ ВООБЩЕ!!! Вот 2 примера, и в том и в другом случае выдается вышеуказанная ошибка! Help! SELECT nakl.shortname, debt.time,debt.category, SUM(nakl.summa); FROM nakl LEFT OUTER JOIN debt ; ON nakl.shortname = debt.shortname; INTO TABLE debt_all.dbf SELECT nakl.shortname, debt.time,debt.category, SUM(nakl.summa); FROM nakl LEFT OUTER JOIN debt ; ON nakl.shortname = debt.shortname; Group BY nakl.shortname; INTO TABLE debt_all.dbf ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 18:20 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Присутствие агрегатной функции SUM по nakl.summa признается фоксом ошибкой, поскольку все остальные поля не являются агрегатами и как следствие они не могут учавствовать в вычислениях. Если код изменить следующим образом, то ошибка исчезнет: Код: plaintext 1. 2. 3. 4.
Во втором примере проблема другого рода - если присутствует предложение group by, то выражения предложения select, не вошедшие в список group by, могут быть только агрегатами (до VFP8, такое разрешалось, а восьмерке это поведение регулируется, только вот сейчас не вспомню чем:(). Значит: Код: plaintext 1. 2. 3. 4.
Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 19:43 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
SET ENGINEBEHAVIOR 70 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 19:48 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Спасибо, Володь, за подсказку - ты как всегда вовремя. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 19:53 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Спасибо большое, Анатолий! Действительно все успешно разрешилось. Причина была именно в "Восьмерке", т.к. до этого все успешно работало на более старых версиях. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2003, 13:04 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Добрый день! Прошу прощение за вторжение в тему, но это единственное что найдено в русскоязычном интернете по интересующей теме. У меня близкая проблема к авторской. Но не совсем. Пишу оболочку для базы в фоксе под С++Builder. Использую драйвер oledb. Имеется вот такой запросик: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 12:49 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
bogomolova_valyaДобрый день! Прошу прощение за вторжение в тему, но это единственное что найдено в русскоязычном интернете по интересующей теме. У меня близкая проблема к авторской. Но не совсем. Пишу оболочку для базы в фоксе под С++Builder. Использую драйвер oledb. Имеется вот такой запросик: Код: plaintext
Это не валидное выражение с использованием GROUP BY! VFP до версии 8 допускал такие вещи. Да и более старших версиях с SET ENGINEBEHAVIOR 70 это можно делать, но... вы для себя ответьте на вопрос: А какое значение tab_num нужно взять для одного значения data_t (поле группировки) ?. Вот и сервер не знает! С уважением, Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 13:07 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
> Автор: bogomolova_valya Код: plaintext
И что такое dano? Если это поле таблицы, тогда нужно переписывать запрос, если это переменная, тогда нужно указывать что это параметр Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 13:10 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
авторЭто не валидное выражение с использованием GROUP BY! VFP до версии 8 допускал такие вещи. Да и более старших версиях с SET ENGINEBEHAVIOR 70 это можно делать, но... вы для себя ответьте на вопрос: А какое значение tab_num нужно взять для одного значения data_t (поле группировки) ?. Вот и сервер не знает! Уважаемый Алексей! Мне надо сгруппировать все по полю data_t. При этом при этой группировке вычислить выражение (то есть перемножить, просуммировать и вычесть). То есть количество полей с одинокавым tab_num может быть хоть сколько, но data_t для каждого tab_num должна стать одна. Уважаемый Игорь Горбонос! Так как Вы исправили запрос - он работать стал (ошибки нет). Но при этом по сравнению с моим количество результирующих записей при обработке увеличилось значительно. Значит как то не правильно вычисляет, или у вас, или у меня. Не могу понять смысловую разницу... Про dano. Поле как поле, числовое. Что в нем не так в запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 16:59 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
> Автор: bogomolova_valya > Не могу понять смысловую разницу... Я с фокспро года 4 всего, но никогда не оставлял Group By на откуп самому фокспро. Всегда писал так как положено в том-же MSSQL или FireBird > Про dano. Поле как поле, числовое. Что в нем не так в запросе? Если это тоже поле этой-же таблицы, тогда его нужно тоже под Group By. Хотя тогда я не понимаю смысла этого запроса. Можно написать своими словами что нужно получить? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 17:10 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Игорь!!!!!!!! Дошло!!!! Вы правы. Получалось так, что в моем запросе группировалось все по дате и в случае совпадения даты для разных tab_num оставалась только первая запись, остальные затирались (терялись короче). А в Вашем варианте учитывается что и tab_num может не совпадать. Спасибо Вам огромное! Все работает. С Вашей поправкой. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 17:14 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
> Автор: Игорь Горбонос И каков смысл полей в запросе? cena*kol - это понятно, цена умноженная на количество чего-то. tab_num - предполагаю, что табельный номер(ну или какой-то идентификатор этого самого чего-то) data_t - некая опорная дата для расчетов с этими вроде понятно, но dano как-то никуда не вписывается Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 17:14 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Как говориться, неиповедима мысль разработчика, куда его занесет (я к этому руку не прикладывала, сама гадала, что ЕТО)... Dano - это сумма наличности!... Типа "дано рублей". ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 17:18 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
> Автор: bogomolova_valya > Как говориться, неиповедима мысль разработчика, куда его занесет (я к этому руку не прикладывала, сама гадала, > что ЕТО)... Dano - это сумма наличности!... Типа "дано рублей". Тогда получается, что твой запрос пытается считать для каждого tab_num сумму произведения цены на количество, но попытка не получается, потому что отдельно стоящее dano не дает "свернуть" несколько произведений в одно число, если оно разное для разных произведений. Это dano или нужно "протолкнуть" в sum: sum(cena*kol-dano) или обрабатывать несколько по другому, например так:(на примере MSSQL) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
по дням и табельным номерам, вторым подзапросом получаем сумму произведений, так-же разбитую по дням и табельным номерам. Джоиним их по дням и табельным номерам и получаем разницу между просуммироваными цена_на_количество и деньги_на_руки. Хотя я могу быть не прав. Но мне не хватает именно смысловой нагрузки этого запроса Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 17:35 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
хочу перейти с 7 на 9 foxpro, но не могу из-за вышеуказанной проблемы c GROUP BY с подсуммировочными запросами. а очень хочется перейти на 9 версию потому что в ней есть другие новые нужные мне возможности, мечтаю просто! как правильно писать в девятой версии FOXPRO подсуммировочные запросы? если сложить нужно не по всем полям, а в GROUP BY нужно выбрать только те поля по которым группирование и сложение производится. пожалуйста дайте пример такого запроса в visual foxpro 9 как это делается?! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2011, 23:05 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
ВладимирМSET ENGINEBEHAVIOR 70 - неужели в 9 версии это единственный верный способ и прийдётся только так теперь выкручиваться? а только средствами запроса select разве теперь никак нельзя сделать подсуммировочный запрос с GROUP BY если не по всем полям(признакам) нужно сложить. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2011, 23:20 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Для тех, кто хелп читать не умеет, да, единственный. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2011, 00:32 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
В 9ке синтаксис запросов привели к стандарту SQL. Ничего страшного в этом нет. Как писать? добавь недостающие поля в GROUP BY или лучше делай в два запроса: первый группировка, второй добавление связанных полей. ЗЫ Лучше привыкать писать по стандарту, в SQL-серверах нет SET ENGINEBEHAVIOR 70 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2011, 07:02 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Я всегда переходил дорогу не обращая внимания на цвет сфетофора. А теперь ввели бешенные штрафы. Неужели придется переходить дорогу только на зеленый цвет?! Использование старого синтаксиса содержала не однозначность результата. Код: plaintext 1. 2. 3. 4. 5. 6.
Какое значение должно иметь поле f2 в результирующей выборке? Неважно, что именно Вы получите, а должно-то было быть что? Максимальное, минимальное? Что? Этого никто не знает, кроме разработчика. В старых версиях FoxPro в этом случае брали первое попавшееся значение, а в новых версиях - это интерпретируется как ошибка. И правильно! Ну, откуда генератору запросов знать, что именно Вы хотели получить! Он не знает. О чем честно Вам и сообщает. Дескать, уточните, что именно Вы хотите получить? Вариантов, в общем-то, два 1. Программист просто забыл указать группировку и по второму полю Код: plaintext
2. Не важно, какое значение второго поля будет в выборке. В этом случае используются аггрегирующие функции max()/min() Код: plaintext
Ну, есть еще один специфический вариант, когда полей вне группировки много и надо взять любые значения, но из одной записи. Это решается специфическими запросами или пересмотром идеологии работы, чтобы таких "идиотских" требований не возникало. Поскольку при тщательном анализе выясняется, что требование действительно "идиотское". Пользователи сами не знают, что им нужно. Не имеют навыков анализа данных и хотя видеть "всего и много". Для подобных задач менять глобальные настройки - бессмысленно. Поскольку в этом случае разных "хотелок" очень много и по любому требуется сложное программирование, чтобы учесть их все. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2011, 11:03 |
|
SQL: GROUP BY clause is missing or invalid. ???
|
|||
---|---|---|---|
#18+
Добрый день, профессионалы. Вот запрос (Фокс 8): SELECT f.fundname, sum(m.fmsum) as bls FROM деньги_фондов m INNER JOIN справочник_фондов f ON f.fundid = m.fundid group by f.fundname order by m.fmdate INTO cursor vw Вроде бы все правильно? Выдает ту же ошибку - про Group By clause... Прошу указать на мои ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 02:06 |
|
|
start [/forum/topic.php?fid=41&msg=32257611&tid=1583637]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 275ms |
total: | 395ms |
0 / 0 |