|
|
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Есть выборка: 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 то нормально работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 11:42 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Все поля запроса не задействованные в агрегированных функциях должны быть включены в GROUP BY или ставь SET ENGINEBEHAVIOR 70 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 11:45 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Спасибо. Все понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 11:55 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
FAQ http://forum.foxclub.ru/read.php?32,177183,177240#msg-177240 Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 12:45 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
если написать Set Enginebehavior 70, то работает все нормально даже можно сказать хорошо. А вот если я буду перечислять все поля и при этом мне необходимо будет получить какую - нибудь сумму за день например, а я в группировке перечислил поля, то итог будет неправильный. Или я не правильно понимаю по поводу перечислений всех полей в Group By ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 14:15 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Тогда придеться переписать выборку так, чтобы небыло лишних полей, которые не учатсвуют в выборке, т.е. оставить только ДЕНЬ и СУММУ. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 15:37 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Vladimir M SklyarТогда придеться переписать выборку так, чтобы небыло лишних полей, которые не учатсвуют в выборке, т.е. оставить только ДЕНЬ и СУММУ. Posted via ActualForum NNTP Server 1.3 Или применить к остальным полям агрегатную функцию не искажающюю результат: MAX(), MIN() С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 15:41 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Hi serenjka! В общем слычае именно использование Set Enginebehavior 70 приводит к неправильному результату (точнее результат часто оказывается вовсе не тем что ожидалось) - правда не в плане подсчёта суммы (агрегируемые поля и поля группировки всегда корректны) - а в части полей которые и не агрегируются, и не являются полями группировки - если это однотабличный запрос то как правило (но это без всяких гарантий) для них берутся значения из последней в физическом порядке записи с данными значениями группировочных полей - для многотабличного запроса вообще сложно понять как отработает оптимизатор. P.S. По данной теме есть просто масса материала - в т.ч. и примеры некорректного поведения - так что пиши правильно и будет всё хорошо :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 01:11 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
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 такой номер, увы, не проходит. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 09:39 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Aleksey-K Aleksey-KНапример, мне надо группировать по ID клиента, а в отчет выводить также и его дополнительные атрибуты (наименование, ИНН и пр..). Понятно, что для одних и тех же ID (это его PK) будут одни и те же остальные атрибуты и группировать по ним не имеет смысла, а приходится. Поэтому, я предпочитаю в VFP ставить Set Enginebehavior 70, Так это в фоксе Вы "изворачиваетесь", а на MSSQL-е как, строите временную таблицу для сохранения промежуточных результатов Код: plaintext 1. 2. 3. , а затем на неё накручиваете справочник с ИНН итп, Код: plaintext 1. или делаете view на view Код: plaintext 1. 2. 3. или ещё используете какие-то механизмы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 10:22 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Что-то я не понял! Какие механизмы ?! Добавляю требуемое поле в GROUP BY и все... С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 11:50 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Алексей. Вот в Фоксе ставишь set enginebehavior 70, поскольку авторесть массу исключений, когда не имеет смысл добавлять агрегат по полю а в MSSQL как обходишь это "препятствие" или в нём имеет смысл добавлять агрегат по полю? Как-то не логично получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 11:56 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
Aleksey-KПоэтому, я предпочитаю в VFP ставить Set Enginebehavior 70, но строго следить за текстом запроса, чтобы не нарушить его семантику. Это ключевой момент. Ты "строго следишь". А много ли новичков этим озабочены? Пропустил компилятор - и замечательно! Прочитай хотя бы начальный вопрос serenjka . Он просто не понимает что он делает неправильно! Не понимает логику работы Select-SQL. Именно поэтому не надо советовать ставить Set Enginebehavior 70. Прежде чем нарушать правила, необходимо эти правила выучить! Надо очень четко понимать, чем рискуешь и в какой момент. Тем более, разница всего-лишь в добавлении в Group by нескольких полей. Не думаю, что такая мелочь стоит изменения глобальной настройки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 12:01 |
|
||
|
Не работает GROUP BY для VFP8
|
|||
|---|---|---|---|
|
#18+
2 ВладимирМ Если времени в обрез, то для начала SET ENGINEBEHAVIOR 70, а позже - разбор полётов и приведение к "правильному" стандарту. Правда оговорка, что в поля не охваченные агрегированными функциями и не включённые в GROUP BY опадут не те данные которые ожидаются - обязательна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 12:10 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33493356&tid=1592562]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 341ms |

| 0 / 0 |
