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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.08.2016, 14:31   #1  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Query self outer join
Добрый день коллеги!

Подскажите, можно ли как то, приджойнить табличку саму к себе по одному и тому же полю, но с разными рейнджами?

Пытался как-то так:
X++:
    Query                   query               = new Query();
    QueryBuildDataSource    qbdsRoutePrimary    = query.addDataSource( tableNum( Route ), "Parrent", UnionType::Union );
    QueryBuildDataSource    qbdsRouteSecondary  = qbdsRoutePrimary.addDataSource( tableNum( Route ), "Child" );
    QueryRun                queryRun;

    Route                   routePrimary;
    Route                   routeSecondary;
    ;

    qbdsRouteSecondary.joinMode( JoinMode::OuterJoin );
    qbdsRouteSecondary.fetchMode( QueryFetchMode::One2Many );
    qbdsRouteSecondary.relations( false );

    qbdsRoutePrimary.addRange( fieldNum( Route, RouteId ) ).value( routeId );
    qbdsRoutePrimary.addRange( fieldNum( Route, OprPriority ) ).value( SysQuery::value( RouteOprPriority::Primary ) );

    qbdsRouteSecondary.addLink( fieldNum( Route, RouteId ), fieldNum( Route, RouteId ), qbdsRoutePrimary.name() );
    qbdsRouteSecondary.addLink( fieldNum( Route, OprId ), fieldNum( Route, OprId ), qbdsRoutePrimary.name() );
    qbdsRouteSecondary.addRange( fieldNum( Route, OprPriority ) ).value( SysQuery::valueNot( RouteOprPriority::Primary ) );

    queryRun = new QueryRun( Query );

    while ( queryRun.next() )
    {
        routePrimary    = queryRun.get( tableNum( Route ), 1 );
        routeSecondary  = queryRun.get( tableNum( Route ), 2 );
    }
Ни как не хочет искать не первичные.

ЗЫ. Нужен именно Query, так как там большая вариативность запроса должна быть.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 05.08.2016, 14:39   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А зачем вы Union делаете?
Объединение не предполагает ограничения между датасорсами, входящими в разные ветки
__________________
Axapta v.3.0 sp5 kr2
Старый 05.08.2016, 14:43   #3  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Цитата:
Сообщение от AndyD Посмотреть сообщение
А зачем вы Union делаете?
Объединение не предполагает ограничения между датасорсами, входящими в разные ветки
Это всё пятница виновата. Юнион это не оттуда.

Извиняюсь, Очепятка закралась. Вместо:
X++:
qbdsRouteSecondary.addLink( fieldNum( Route, OprId ), fieldNum( Route, OprId ),
нужно:
X++:
qbdsRouteSecondary.addLink( fieldNum( Route, OprNum ), fieldNum( Route, OprNum ),
и всё работает.

Тему можно закрыть, а лучше удалить.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Двойной Outer Join в Query LTA DAX: Программирование 2 21.01.2020 09:28
Dynamics AX Sustained Engineering: Performance issue on Query Object when using Outer Join with more than one Child Table Blog bot DAX Blogs 0 21.12.2010 04:13
fatihdemirci: Lookup’ta join ile query yazmak Blog bot DAX Blogs 1 29.08.2010 13:35
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22

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

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

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