16.08.2011, 18:52 | #1 |
NavAx
|
Агрегирование и group by по одинаковым полям
Сегодня наступил на экзотические фигурные грабли.
AX2009 SP1 RU7 Вкратце: Если сделать запрос по числовому полю вида select sum(<какое-то поле>) group by <какое-то поле>, то в результате, при наличии в таблице записей с одинаковым значением в <какое-то поле> получим отнюдь не одну запись с суммированным значением в <какое-то поле>, как может подумать знающий SQL (и не n - по числу строк с совпадающим значением, записей с одинаковым значением в <какое-то поле>, как может показаться неискушенному уму) . Но получим ОДНУ строку с нессуммированным значением в <какое-то поле> . Усугубим. Есть таблица, в которой есть индекс, в который входит <какое-то поле>. Указываем этот индекс в качестве используемого в запросе, и делаем агрегирование по <какое-то поле>. Получаем автоматом от Аксапты "подарок" в виде select агрег_ф-ция<какое-то поле>, <список полей из индекса> group by <список полей из индекса> , что приводит к автоматическому срабатыванию вышеописанных граблей. Поймал на РФОшном отчете, и существующем индексе на LedgerTrans с включением поля AmountMST (сильно ускоряет расчет фин. отчетности). Причина: при таком запросе SQL сервер возвращает для поля <какое-то поле> два значения - собственно, результат агрегирующей ф-ции как БЕЗЫМЯННЫЙ СТОЛБЕЦ, вместо значения в самом поле, как ожидает Аксапта), а в самом поле, ессно, фигурирует то значение, по которому была сгруппированы записи. Voila! Резная ручка стремительно приближается ко лбу.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... Последний раз редактировалось Maximin; 16.08.2011 в 18:54. |
|
|
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (1). |
Теги |
ax2009, bug, sql, группировка, запрос (query), ошибка, ax4.0 |
|
|