|
![]() |
#1 |
Участник
|
не, не смогу такое привести.
Но ведь Вы мною предложенный вариант попробовали правда? Знаете почему, потому что jobik не работает так как изначально задумали, а причина неизвестна.
__________________
The Variable men power. |
|
![]() |
#2 |
Участник
|
не работает "как задумали" - мягко сказано
![]() Если фильтровать текстовое поле, участвующее в группировке, то group by попросту игнорируется! (причём, например, для целочисленного поля тот же код отрабатывает корректно ![]() Что я делаю не так? ![]() Кто-нибудь может прокомментрировать такое поведение group by? Это следствие каких-то известных (документированных) ограничений? И какие ещё сюрпризы от использования временных таблиц можно ожидать? |
|
![]() |
#3 |
Участник
|
могу подвердить, зашел на нашу систему, также исполняется два раза.
Ах4.0сп2
__________________
The Variable men power. |
|
![]() |
#4 |
Участник
|
баг можно побороть, если вставить не явно поле, как я предпологал выше, а функцию агрегации над ним. Тогда аксапта "распознает" что таки надо группировать!
X++: while select maxof(Field1) from t group by Field1 where t.Field1 == '1' { info(strfmt("fisrt query %1",t.Field1)); }
__________________
The Variable men power. Последний раз редактировалось Varmen; 12.10.2009 в 23:34. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
![]() |
#5 |
Участник
|
X++: static void Job10(Args _args) { TempDummyTable t; ; ttsbegin; t.Field1="1"; t.insert(); ttscommit; ttsbegin; t.Field1="1"; t.insert(); ttscommit; while select maxof(Field1) from t group by Field1 where t.Field1 == '1' { info(strfmt("fisrt query %1",t.Field1)); } while select t group by Field1 where t.Field1 == '1' { info(strfmt("second query %1",t.Field1)); } } fisrt query 1 second query 1 second query 1
__________________
The Variable men power. |
|
![]() |
#6 |
Участник
|
Ну что смеемся дальше?
добавим поле Фиелд2 X++: static void Job10(Args _args) { TempDummyTable t; ; ttsbegin; t.Field1="1"; t.Field2="2"; t.insert(); ttscommit; ttsbegin; t.Field1="1"; t.Field2="4"; t.insert(); ttscommit; while select maxof(Field1) from t group by Field1 where t.Field1 == '1' { info(strfmt("fisrt query %1--%2",t.Field1,t.Field2)); } while select t group by Field1 where t.Field1 == '1' { info(strfmt("second query %1--%2",t.Field1,t.Field2)); } } fisrt query 1-- second query 1--2 second query 1--4 Ну куда группировка делась, во втором случае?
__________________
The Variable men power. |
|
![]() |
#7 |
Участник
|
ну и под занавес, мой любимый RecId itd
X++: static void Job10(Args _args) { TempDummyTable t; ; ttsbegin; t.Field1="1"; t.Field2="2"; t.insert(); ttscommit; ttsbegin; t.Field1="1"; t.Field2="4"; t.insert(); ttscommit; while select maxof(Field1) from t group by Field1 where t.Field1 == '1' { info(strfmt("fisrt query %1--%2",t.Field1,t.Field2)); } while select t group by Field1 where t.Field1 == '1' { info(strfmt("second query %1--%2--%3",t.Field1,t.Field2,t.RecId)); } } (21:44:51) fisrt query 1-- second query 1--2--1328 second query 1--4--1376
__________________
The Variable men power. |
|
![]() |
#8 |
MCITP
|
![]()
Вы имеете ввиду, что результаты никак не сгруппировались вобще и в остальных колонках тоже есть данные? Ну мне кажется это сразу было очевидно, что Аксапта "забыла" сделать груп_бай вообще.
![]() ![]() По сути... Проверил на DAX2009 SP1 - результат абсолютно тот же. Реальный баг. Видимо разработчики такой вырожденный случай тупо забыли/не подумали закодить. ![]() Почему "вырожденный"? Ну потому что вы по сути хотите выяснить есть ли у вас хоть одна строка со значением "1". С точки зрения производительности и логики я думаю лучше было бы написать этот запрос примерно так: X++: while select firstFast firstOnly Field1 from tmpTable where tmpTable.Field1 == '1' Так работает... ![]()
__________________
Zhirenkov Vitaly |
|
Теги |
bug, баг, временная таблица, запрос (query), ошибка |
|
![]() |
||||
Тема | Ответов | |||
Временная таблица | 21 | |||
производительность: map или временная таблица | 5 | |||
Временная таблица + RLS | 6 | |||
select sum(amount) from временная таблица | 6 | |||
next и временная таблица | 3 |
|