Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не работает GROUP BY для VFP8 / 14 сообщений из 14, страница 1 из 1
17.01.2006, 11:42
    #33486760
serenjka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Есть выборка:

Select num_pp, Max(time) As time, kassir ;
From _Kas_ob_ ;
Group By kod_val ;
Into Cursor Rep

Выдает ошибку SQL: Group By clause is missing or invalid.
А если тоже самое запустить для 6-ой версии VFP то нормально работает.
...
Рейтинг: 0 / 0
17.01.2006, 11:45
    #33486770
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Все поля запроса не задействованные в агрегированных функциях должны быть включены в GROUP BY или ставь SET ENGINEBEHAVIOR 70
...
Рейтинг: 0 / 0
17.01.2006, 11:55
    #33486801
serenjka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Спасибо. Все понял.
...
Рейтинг: 0 / 0
17.01.2006, 12:45
    #33486924
Vladimir M Sklyar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
FAQ http://forum.foxclub.ru/read.php?32,177183,177240#msg-177240
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
17.01.2006, 14:15
    #33487215
serenjka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
если написать Set Enginebehavior 70, то работает все нормально даже можно сказать хорошо.
А вот если я буду перечислять все поля и при этом мне необходимо будет получить какую - нибудь сумму за день например, а я в группировке перечислил поля, то итог будет неправильный. Или я не правильно понимаю по поводу перечислений всех полей в Group By
...
Рейтинг: 0 / 0
17.01.2006, 15:37
    #33487494
Vladimir M Sklyar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Тогда придеться переписать выборку так, чтобы небыло лишних полей, которые не учатсвуют в выборке, т.е. оставить только ДЕНЬ и СУММУ.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
17.01.2006, 15:41
    #33487520
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Vladimir M SklyarТогда придеться переписать выборку так, чтобы небыло лишних полей, которые не учатсвуют в выборке, т.е. оставить только ДЕНЬ и СУММУ.
Posted via ActualForum NNTP Server 1.3
Или применить к остальным полям агрегатную функцию не искажающюю результат: MAX(), MIN()
С уважением, Алексей.
...
Рейтинг: 0 / 0
20.01.2006, 01:11
    #33493142
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Hi serenjka!

В общем слычае именно использование Set Enginebehavior 70 приводит к
неправильному результату (точнее результат часто оказывается вовсе не тем
что ожидалось) - правда не в плане подсчёта суммы (агрегируемые поля и поля
группировки всегда корректны) - а в части полей которые и не агрегируются, и
не являются полями группировки - если это однотабличный запрос то как
правило (но это без всяких гарантий) для них берутся значения из последней в
физическом порядке записи с данными значениями группировочных полей - для
многотабличного запроса вообще сложно понять как отработает оптимизатор.
P.S. По данной теме есть просто масса материала - в т.ч. и примеры
некорректного поведения - так что пиши правильно и будет всё хорошо :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
20.01.2006, 09:39
    #33493356
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Igor Korolyov
Hi serenjka!

В общем слычае именно использование Set Enginebehavior 70 приводит к
неправильному результату (точнее результат часто оказывается вовсе не тем
что ожидалось) - правда не в плане подсчёта суммы (агрегируемые поля и поля
группировки всегда корректны) - а в части полей которые и не агрегируются, и
не являются полями группировки - если это однотабличный запрос то как
правило (но это без всяких гарантий) для них берутся значения из последней в
физическом порядке записи с данными значениями группировочных полей - для
многотабличного запроса вообще сложно понять как отработает оптимизатор.
P.S. По данной теме есть просто масса материала - в т.ч. и примеры
некорректного поведения - так что пиши правильно и будет всё хорошо :)

Posted via ActualForum NNTP Server 1.3
В общем случае имеено так. Но есть массу исключений, когда не имеет смысл добавлять агрегат по полю, а T-SQL (а теперь и VFP + Set Enginebehavior 80 ) этого требует. Например, мне надо группировать по ID клиента, а в отчет выводить также и его дополнительные атрибуты (наименование, ИНН и пр..). Понятно, что для одних и тех же ID (это его PK) будут одни и те же остальные атрибуты и группировать по ним не имеет смысла, а приходится. Поэтому, я предпочитаю в VFP ставить Set Enginebehavior 70, но строго следить за текстом запроса, чтобы не нарушить его семантику. В T-SQL такой номер, увы, не проходит.
С уважением, Алексей.
...
Рейтинг: 0 / 0
20.01.2006, 10:22
    #33493450
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Aleksey-K

Aleksey-KНапример, мне надо группировать по ID клиента, а в отчет выводить также и его дополнительные атрибуты (наименование, ИНН и пр..). Понятно, что для одних и тех же ID (это его PK) будут одни и те же остальные атрибуты и группировать по ним не имеет смысла, а приходится. Поэтому, я предпочитаю в VFP ставить Set Enginebehavior 70,

Так это в фоксе Вы "изворачиваетесь", а на MSSQL-е как, строите временную таблицу для сохранения промежуточных результатов

Код: plaintext
1.
2.
3.
CREATE TABLE #t (ID_Client, Sum_чего-то) 
or
SELECT ID_Client, SUM(чего-то) INTO #tt FROM ......

, а затем на неё накручиваете справочник с ИНН итп,

Код: plaintext
1.
SELECT ID_Client, SUM(чего-то), INN From #t (или #tt)
какой-то JOIN Orgs .... ну и так далее

или делаете view на view

Код: plaintext
1.
2.
3.
SELECT ID_Client, INN from Orgs 
JOIN 
(SELECT ID_Client, SUM(чего-то) FROM ......) tt
ON ......

или ещё используете какие-то механизмы.
...
Рейтинг: 0 / 0
20.01.2006, 11:50
    #33493732
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Что-то я не понял! Какие механизмы ?!
Добавляю требуемое поле в GROUP BY и все...

С уважением, Алексей
...
Рейтинг: 0 / 0
20.01.2006, 11:56
    #33493754
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Алексей.

Вот в Фоксе ставишь set enginebehavior 70, поскольку

авторесть массу исключений, когда не имеет смысл добавлять агрегат по полю

а в MSSQL как обходишь это "препятствие" или в нём имеет смысл добавлять агрегат по полю?

Как-то не логично получается.
...
Рейтинг: 0 / 0
20.01.2006, 12:01
    #33493787
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
Aleksey-KПоэтому, я предпочитаю в VFP ставить Set Enginebehavior 70, но строго следить за текстом запроса, чтобы не нарушить его семантику.
Это ключевой момент. Ты "строго следишь". А много ли новичков этим озабочены? Пропустил компилятор - и замечательно!

Прочитай хотя бы начальный вопрос serenjka . Он просто не понимает что он делает неправильно! Не понимает логику работы Select-SQL.

Именно поэтому не надо советовать ставить Set Enginebehavior 70. Прежде чем нарушать правила, необходимо эти правила выучить! Надо очень четко понимать, чем рискуешь и в какой момент.

Тем более, разница всего-лишь в добавлении в Group by нескольких полей. Не думаю, что такая мелочь стоит изменения глобальной настройки.
...
Рейтинг: 0 / 0
20.01.2006, 12:10
    #33493831
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает GROUP BY для VFP8
2 ВладимирМ
Если времени в обрез, то для начала SET ENGINEBEHAVIOR 70, а позже - разбор полётов и приведение к "правильному" стандарту. Правда оговорка, что в поля не охваченные агрегированными функциями и не включённые в GROUP BY опадут не те данные которые ожидаются - обязательна.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не работает GROUP BY для VFP8 / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]