AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.07.2014, 14:53   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Полные предложения ORDER BY и GROUP BY
Версия системы AX2009. Примеров подобного кода в стандарте как-то ни разу не встречалось, как в прочем и задач, для которых это необходимо.

Пишу этот пост на случай вдруг ещё кто не знает. Неожиданно для себя обнаружил, что оказывается в X++ в предложения ORDER BY и GROUP BY можно включать поля не только текущего курсора но и присоединенных! Для этого достаточно указать имя соответствующего курсора перед именем поля.

Пример:

Такой обычный запрос отсортирует возвращаемые записи сначала по полям Field1 и field3 из таблицы Table1, а потом по полю Field2 из таблицы Table2.
X++:
while select Table1 order by Field1, field3
join Table2 order by Field2
{}
Если же последовательность полей в сортировке должна быть следующей Table1.Field1, Table2.Field2, Table1.Field3, то реализовать это можно так:
X++:
while select Table1 order by Table1.Field1, Table2.Field2, Table1.Field3
join Table2
{}
Дополнение: нельзя сочетать оба синтаксиса написания имени поля. Если хотя бы в одном месте указано расширенное наименование, то и для всех остальных полей сортировки и группировки нужно поступать также.
За это сообщение автора поблагодарили: mazzy (2), rusk (1), trud (1), Pustik (2), sukhanchik (2), Krash (1), MikeR (1), ice (1), IvanS (1), jeky (1), kornix (3), Ярослав Щекин (3).
Старый 28.07.2014, 23:09   #2  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Здорово, что тема order by, наконец, раскрыта.
А вот где собственно про GROUP BY и/или совместное использование, или я не правильно понял и прочитал тему сообщения?
__________________
Axapta book for developer
Старый 29.07.2014, 08:25   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от MikeR Посмотреть сообщение
Здорово, что тема order by, наконец, раскрыта.
А вот где собственно про GROUP BY и/или совместное использование, или я не правильно понял и прочитал тему сообщения?
Для GROUP BY те же правила что и для ORDER BY.

Думаю не секрет, что группируя данные в запросе аксапта выполняет ещё и сортировку результата. В аксапте нельзя сгруппировать и при этом не отсортировать. К слову сказать, именно для этого направление сортировки ASC/DESC в аксапте имеет смысл (и это разрешено синтаксисом) задавать не только для ORDER BY, но и для GROUP BY.

Последовательность полей в предложении GROUP BY важна именно с точки зрения сортировки полученного сгруппированного результата.
Старый 29.07.2014, 21:21   #4  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
...К слову сказать, именно для этого направление сортировки ASC/DESC в аксапте имеет смысл (и это разрешено синтаксисом) задавать не только для ORDER BY, но и для GROUP BY.
Я про то, что использовать вместе и GROUP BY и ORDER BY, причем ORDER BY какой-нить хитрый не те поля берет, что в GROUP BY , да и сортировочку разнонаправленную сделать. Ну как в классическом TSQL. Не могу сказать, что эта фича сильно востребована. Думаю и уверен, что даже наоборот в хорошо спроектированном приложение, такие выкрутасы даже не очень то и нужны, но всегда в жизни бывает НО.
Я, как бы это сказать, просто подумал, что это уже реализовали, просто я не знал.
А это вроде, как для меня, были вещи очевидные, сорри.
__________________
Axapta book for developer
Старый 30.07.2014, 08:34   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от MikeR Посмотреть сообщение
Я про то, что использовать вместе и GROUP BY и ORDER BY, причем ORDER BY какой-нить хитрый не те поля берет, что в GROUP BY , да и сортировочку разнонаправленную сделать. Ну как в классическом TSQL. Не могу сказать, что эта фича сильно востребована. Думаю и уверен, что даже наоборот в хорошо спроектированном приложение, такие выкрутасы даже не очень то и нужны, но всегда в жизни бывает НО.
Я, как бы это сказать, просто подумал, что это уже реализовали, просто я не знал.
А это вроде, как для меня, были вещи очевидные, сорри.
Никогда не понимал эту проблему. Все жалуются на то что в аксапте нельзя использовать ORDER BY совместно с GROUP BY. Я же вижу что в аксапте наоборот нельзя группировать и при этом НЕ сортировать. С точки зрения производительности, когда мне сортировка не важна, а важна только группировка это да - недостаток. Но с точки зрения функциональности - никаких ограничений в связи с этим я не вижу.

Может я что-то не понимаю. Можете привести пример такой хитровывернутой группировки с сортировкой в классическом TSQL, которую нельзя реализовать в аксапте.
Старый 30.07.2014, 09:19   #6  
Ярослав Щекин is offline
Ярослав Щекин
Участник
 
78 / 174 (6) ++++++
Регистрация: 16.03.2009
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Может я что-то не понимаю. Можете привести пример такой хитровывернутой группировки с сортировкой в классическом TSQL, которую нельзя реализовать в аксапте.
А чего тут выворачивать-то? Например, так:
Код:
SELECT ITEMID, COUNT(*)
FROM INVENTTRANS
GROUP BY ITEMID
ORDER BY COUNT(*)
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 30.07.2014, 09:44   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Ярослав Щекин Посмотреть сообщение
А чего тут выворачивать-то? Например, так:
Код:
SELECT ITEMID, COUNT(*)
FROM INVENTTRANS
GROUP BY ITEMID
ORDER BY COUNT(*)
Спасибо. Понятно. Но я бы связал такое ограничение с невозможностью использовать в предложениях ORDER BY и GROUP BY вообще какие-либо выражения. Разрешены только поля!

Вот такой запрос, например, тоже не получится на X++ реализовать, и совместное использование ORDER BY и GROUP BY здесь не причем.
Код:
SELECT *
FROM INVENTTRANS
ORDER BY INVENTTRANS.COSTAMOUNT / INVENTTRANS.QTY
Старый 31.07.2014, 11:25   #8  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Вот такой запрос, например, тоже не получится на X++ реализовать, и совместное использование ORDER BY и GROUP BY здесь не причем.
Код:
SELECT *
FROM INVENTTRANS
ORDER BY INVENTTRANS.COSTAMOUNT / INVENTTRANS.QTY
Без использования доп.переменных - нет, но с ними можно ))
Теги
group by, order by, select, x++, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Sustained Engineering: KB 2973728 - When changing the vendor on a purchase requisition, and releasing the requisition to a purchase order, sales tax group and default dimensions are not updated on the purchase order and lines Blog bot DAX Blogs 0 29.06.2014 00:15
atinkerersnotebook: Using Service Management to Track Service Orders Blog bot DAX Blogs 1 25.08.2013 19:16
dynamicsaxtraining: Vendor returns Blog bot DAX Blogs 0 11.10.2012 00:11
dynamicsaxtraining: Purchase Blog bot DAX Blogs 0 11.03.2012 05:25
dynamicsaxtraining: Create purchase order Blog bot DAX Blogs 0 14.12.2009 14:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:10.