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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.06.2015, 09:56   #1  
trudel is offline
trudel
Участник
 
52 / 10 (1) +
Регистрация: 17.04.2015
Оператор IN
Через AddRange все понятно, он сам берет и проверяет на вхождение в диапазон разбивая его на OR.

А через Select как? Оператора IN нет, а чем заменить?

like даже не подойдет, т.к. может быть и значение "520" и "5201", и 520 не должен определиться,если выбран 5201.
Старый 18.06.2015, 10:05   #2  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
select a
where a.field1 == "5201"
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 18.06.2015, 10:14   #3  
trudel is offline
trudel
Участник
 
52 / 10 (1) +
Регистрация: 17.04.2015
Цитата:
Сообщение от Weez Посмотреть сообщение
select a
where a.field1 == "5201"
может неясно написал...

есть Dpz типа Range, там обычный Range "5201, 54 , 52" к примеру.

Проверяю на вхождение моего номера MyNumber IN (Dpz). Как IN в Select реализовать?
Старый 18.06.2015, 10:52   #4  
_AV_ is offline
_AV_
Участник
 
29 / 19 (1) ++
Регистрация: 27.02.2008
Адрес: Санкт-Петербург
Например, вот так:
X++:
select a
where (a.field1 == "5201" || a.field1 == "54" || a.field1 == "52")
Старый 18.06.2015, 10:58   #5  
axm2013
Гость
 
n/a
Цитата:
Сообщение от trudel Посмотреть сообщение
.. Как IN в Select реализовать?
Если хотите для произвольного множества то через join к временной табличке в TempDB к примеру.

А тут наверное лучше использовать SysQuery и addRangesFromKeyData
Старый 18.06.2015, 11:04   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trudel Посмотреть сообщение
Как IN в Select реализовать?
прямой ответ на вопрос в вашей формулировке - никак.
ответ на вопрос - использовать query и range.
Старый 18.06.2015, 11:14   #7  
_AV_ is offline
_AV_
Участник
 
29 / 19 (1) ++
Регистрация: 27.02.2008
Адрес: Санкт-Петербург
можно еще почитать тут: select в X++ и список значений в условии where
За это сообщение автора поблагодарили: trudel (1).
Старый 18.06.2015, 11:37   #8  
trudel is offline
trudel
Участник
 
52 / 10 (1) +
Регистрация: 17.04.2015
Цитата:
Сообщение от _AV_ Посмотреть сообщение
класс!!! меня очень не радовала перспектива переписывать всё на Query..
Старый 18.06.2015, 11:45   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trudel Посмотреть сообщение
класс!!! меня очень не радовала перспектива переписывать всё на Query..
вас будут проклинать поколения программистов, которые будут работать после вас.
лучше используйте query сразу и почти всегда.
За это сообщение автора поблагодарили: IvanS (1).
Старый 18.06.2015, 12:59   #10  
trudel is offline
trudel
Участник
 
52 / 10 (1) +
Регистрация: 17.04.2015
Цитата:
Сообщение от mazzy Посмотреть сообщение
вас будут проклинать поколения программистов, которые будут работать после вас.
лучше используйте query сразу и почти всегда.
а что страшного в select ?
Старый 18.06.2015, 13:03   #11  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Помниться разгребал чейто код (наверное MS) в славном модуле PSA в ах2009. Все было настолько запущено, что мало того что форма минуты грузилась так еще и при определенных обстоятельствах SQL запрос выезжал за рамки максимального буфера (был по умолчанию 24Кб).

К чему это я? На той форме как раз ктото напрограмировал динамичиские range.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 19.06.2015, 09:33   #12  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от trudel Посмотреть сообщение
а что страшного в select ?
Если функционал постоянно развивается, то рано или поздно его придется переписывать на Query. У пользователей аппетит обычно приходит во время еды.
Старый 23.06.2015, 06:35   #13  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Если ТС хочет использовать SELECT, что мешает ему написать как уже советовали:
Цитата:
Сообщение от _AV_ Посмотреть сообщение
Например, вот так:
X++:
select a
where (a.field1 == "5201" || a.field1 == "54" || a.field1 == "52")
__________________
// no comments
Старый 23.06.2015, 08:16   #14  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от dech Посмотреть сообщение
Если ТС хочет использовать SELECT, что мешает ему написать как уже советовали:
Возможно не знание количества значений для проверки.
Поэтому тут либо джойнить с временной таблицей, либо использовать квери
Старый 23.06.2015, 08:53   #15  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,233 / 974 (37) +++++++
Регистрация: 03.04.2002
Lightbulb
Цитата:
Сообщение от trudel Посмотреть сообщение
а что страшного в select ?
Да собственно самое страшное в нем то, что его путают с sql select.
И поэтому вариант в цикле перебрать значения, которые вы хотите запихать в IN и вызвать select a where a.field1 == value соответствующее число раз противоречит всем инстинктам человека более-менее знающего sql. Даже у опытных аксапщиков такой подход вызывает интуитивное неприятие. А между тем, при правильной настройке кэширования AOS отрабатывает зацикленные запросы не сильно хуже одного, монструозного. А читать, писать и дебажить циклы несравнимо легче чем sql.
Похожесть конструкции на sql настолько взрывает мозг, что даже в официальные best practice внесли идиотское требование в x++ select указывать список выбираемых полей. Это вопервых приводит к трудноуловимым runtime багам, вовторых отрубает кэширование, из-за чего резко падает производительность системы (хотя скорость исполнения конкретного запроса действительно может вырости).
На самом деле x++ select это не запрос, а factory метод. Но синтаксис сбивает с толку.
__________________
Isn't it nice when things just work?

Последний раз редактировалось macklakov; 23.06.2015 в 08:59.
За это сообщение автора поблагодарили: mazzy (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вычисления в таблицах Narayana DAX: Программирование 78 13.11.2012 15:56
Длительные операции маршрута без участия оператора Hard DAX: Функционал 12 03.05.2011 14:07
Как работает тернарный оператор cerbo DAX: Программирование 40 30.10.2009 15:42
Query - getNo(n) - не видит данных Arahnid DAX: Программирование 15 19.02.2009 11:52
Где хранится оператор SQL, сгенерированный в отчете? teddy DAX: Программирование 13 22.10.2004 13:24
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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