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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.07.2020, 14:58   #1  
Metrofun is offline
Metrofun
Участник
 
72 / 10 (1) +
Регистрация: 27.04.2020
? Использование Union
Здравствуйте.
Axapta 3.0.
Нужно сделать объединение данных двух select'ов.
Как я понимаю, это можно сделать в одном запросе только используя прямой запрос к базе используя Statement, UserConnection?
Используя оператор while select нельзя так сделать?
И через Query, QueryBuildDataSource тоже не получиться?
Старый 01.07.2020, 15:01   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Только прямой запрос
Старый 01.07.2020, 17:05   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Ещё есть вариант с подменой текста запроса у View.
Подмена запроса для View

Последний раз редактировалось S.Kuskov; 01.07.2020 в 17:07.
Старый 01.07.2020, 23:03   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Metrofun Посмотреть сообщение
Нужно сделать объединение данных двух select'ов.
Только нужно учесть, что запрос UNION настолько медленный, что может получиться быстрее данные двух запросов просто залить в одну временную табличку (временную на словах; в БД она должна быть постоянной).Но тут нужно исключать конфликт двух одновременно работающих пользователей над этим механизмом.
На малом объеме данных (когда вопрос подбора индексов неактуален) конечно можно и UNION-ом воспользоваться.
__________________
Возможно сделать все. Вопрос времени
Старый 03.07.2020, 13:31   #5  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Только нужно учесть, что запрос UNION настолько медленный
Далеко не всегда он медленный. Я не раз разбивал один тяжелый запрос с условием OR на несколько с последующим объединением.
Старый 05.07.2020, 21:29   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Alexius Посмотреть сообщение
Далеко не всегда он медленный. Я не раз разбивал один тяжелый запрос с условием OR на несколько с последующим объединением.
Скажем так. Все познается в сравнении. Замена OR на UNION может дать прирост. А можно и вместо UNION сделать 2 INSERT-а. Это еще больше даст прирост, т.к. UNION строит временную таблицу, которая отъедает оперативную память, а INSERT сохраняет все на диск и при многопользовательском использовании запроса лишняя память не расходуется и в "потолок" сервер БД не упирается.
А если INSERT будет делаться во временную таблицу АХ, которая физически после превышения порога 128Кбайт (кажется) становится файлом - то конечно UNION будет быстрее, т.к. он использует все-таки ресурсы сервера БД.

В большинстве случаев, без конкретики вполне можно исходить из того, что UNION медленный вопрос и его всегда можно ускорить.
Но конечно будут случаи, когда UNION будет быстрее. Но тут опять-таки надо исследовать причину. Скорее всего можно будет уйти от UNION с увеличением скорости.

Axapta 3.0 - это неважно - все равно автор предполагает использование Statement и UserConnection. До версии 2009 - UNION в Х++ или через метаданные АОТа нельзя задать.
__________________
Возможно сделать все. Вопрос времени
Старый 02.07.2020, 15:33   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Metrofun Посмотреть сообщение
Используя оператор while select нельзя так сделать?
Если у Вас While select, то почему просто не сделать 2 последовательных while select? Формально - это и будет UNION ALL. Если же надо исключать дубли, то это добавить объект Set и отслеживать через него факты повторов по ключевым полям

Собственно, Вы же все-равно будете писать 2 запроса. Ну и в чем проблема написать их по очереди, а не в одном операторе?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 03.07.2020, 18:41   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Коллеги, а какая разница быстрый UNION или не очень если у автора топика:
Цитата:
Axapta 3.0.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Computed column for union values from multiple outer joined data sources in view Blog bot DAX Blogs 0 06.03.2019 21:13
Ошибка запроса типа Union в лукапе Oz DAX: Программирование 1 26.05.2017 15:23
AX UK: Support of the 2010 VAT Package Legislation in the European Union for Microsoft Dynamics AX Blog bot DAX Blogs 0 17.11.2009 17:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:17.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.