:: Visual Foxpro, Foxpro for DOS
Затупил с GROUP BY
Каратаев
Автор

Сообщений: 4061
Откуда: Алматы
Дата регистрации: 04.12.2001
Что-то туплю на ровном месте. Простейший код приводит к ошибке.
CREATE CURSOR cur_test (kod_ C(4), name_ C(20), sum_ N(12,2))
INSERT INTO cur_test (kod_, name_, sum_) VALUES ("2238","Ирмас", 70)
INSERT INTO cur_test (kod_, name_, sum_) VALUES ("2238","Ирмас", 80)
INSERT INTO cur_test (kod_, name_, sum_) VALUES ("0046","ЮТШ", 100)
INSERT INTO cur_test (kod_, name_, sum_) VALUES ("2238","Ирмас", 80)
INSERT INTO cur_test (kod_, name_, sum_) VALUES ("0046","ЮТШ", 100)
SELECT kod_, name_, SUM(sum_) as sum_ FROM cur_test ;
GROUP BY kod_ ;
INTO cursor cur_res READWRITE
BROWSE
USE IN SELECT("cur_res")
USE IN SELECT("cur_test")
[attachment 36903 2024-07-15_115346.png]
При этом, в программе полно намного более сложных выборок, а вот тут не соображу причину... Что не так?


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Затупил с GROUP BY
alex;

Сообщений: 3475
Откуда: Москва
Дата регистрации: 23.11.2004
SET ENGINEBEHAVIOR 70
SELECT kod_, name_, SUM(sum_) as sum_ FROM cur_test ;
GROUP BY kod_ ;
INTO cursor cur_res READWRITE
работает

По стандарту SQL надо перечислять все неагрегирующие поля из select, т.е.
GROUP BY kod_, name_
Фокс раньше позволял этого не делать.



Исправлено 1 раз(а). Последнее : alex;, 15.07.24 11:43
Ratings: 0 negative/0 positive
Re: Затупил с GROUP BY
Каратаев
Автор

Сообщений: 4061
Откуда: Алматы
Дата регистрации: 04.12.2001
Вот спасибо! Даже и не смотрел в сторону SET ENGINEBEHAVIOR...



------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Затупил с GROUP BY
AndyNigmatec

Сообщений: 1679
Откуда: Волгоград
Дата регистрации: 28.06.2015
Даже и без всяких SET, grop by написан некоректно - все поля не входящие в group by должны быть под какой-нить агрегатной функцией - sum, avg, max, min... иначе да - запрос по сути некорректен - откуда машине знать что мы хотим сделать с полем не входящему в группировку.

Так что я бы на SETы не надеялся, а написал предельно конкретно



Исправлено 3 раз(а). Последнее : AndyNigmatec, 15.07.24 18:19
Ratings: 0 negative/0 positive
Re: Затупил с GROUP BY
sphinx

Сообщений: 31957
Откуда: Екатеринбург
Дата регистрации: 22.11.2006
Каратаев
Вот спасибо! Даже и не смотрел в сторону SET ENGINEBEHAVIOR...

Саня, ну право... Хотя сам так же подкосячиваю.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Затупил с GROUP BY
Каратаев
Автор

Сообщений: 4061
Откуда: Алматы
Дата регистрации: 04.12.2001
AndyNigmatec
Даже и без всяких SET, grop by написан некоректно - все поля не входящие в group by должны быть под какой-нить агрегатной функцией - sum, avg, max, min... иначе да - запрос по сути некорректен - откуда машине знать что мы хотим сделать с полем не входящему в группировку.
В данном конкретном случае всё корректно, так-как поля kod_ и name_ однозначны. То есть каждому полю kod_ соответствует только одно значение name_. Типа как из справочника: код, наименование и т.д...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Затупил с GROUP BY
Каратаев
Автор

Сообщений: 4061
Откуда: Алматы
Дата регистрации: 04.12.2001
sphinx
Саня, ну право... Хотя сам так же подкосячиваю.
Саня, да тут дело было в другом. В стартовом модуле программы (goApp) уже прописана настройка SET ENGINEBEHAVIOR, поэтому в коде программы такие запросы идут без проблем. А в данном случае запускал просто тестовую функцию вне программы, естественно программные настройки не считывались, а за давностью просто не вспомнил про эту настройку...
Старею...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 18 (Гостей: 18)

© 2000-2025 Fox Club 
Яндекс.Метрика