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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.11.2018, 19:03   #1  
AzatGDC is offline
AzatGDC
Участник
 
27 / 14 (1) ++
Регистрация: 08.11.2018
dax sql как отфильтровать данные по двум таблицам
Всем добрый день,

Подскажите пожалуйста. У меня есть две таблицы. Таблица журналов - JournalAzat и таблица строк - JournalStringsAzat. Связаны они по полю JournalIdAzat. Мне необходимо отфильтровать данные вначале по одной таблице а затем связанные данные по другой. Как это сделать при помощи SQL? Прочитал про манипулцию данными следующую статью
https://docs.microsoft.com/en-us/dyn...xpp-data-query
Но именно этот вопрсо там не освещен. Пишу следующее:
X++:
while select * from journalAzat where journalAzat.JournalStatusAzat == JournalStatusAzat::Closed
        join journalStringsAzat where journalAzat.JournalIdAzat == journalStringsAzat.JournalIdAzat
    {

    }
Связываю две таблица. при этом на первую накладываю фильтр. а вот далее не могу понять как применить фильтр к другой таблице. возможно что вообще неправильный подход использую. киньте пожалуйста ссылку на то что нужно почитать по этой теме.
Старый 12.11.2018, 19:20   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,317 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от AzatGDC Посмотреть сообщение
Мне необходимо отфильтровать данные вначале по одной таблице а затем связанные данные по другой.
Так у Вас все правильно сделано. Просто возьмите себе в привычку после слова where писать условия, в которых слева будет та таблица, которая стоит в ближайшем join / select и тогда сразу наглядно увидите фильтр
X++:
while select * from journalAzat 
        where journalAzat.JournalStatusAzat == JournalStatusAzat::Closed // Область фильтров по journalAzat
        join journalStringsAzat 
              where journalStringsAzat.JournalIdAzat == journalAzat.JournalIdAzat // Область фильтров по journalStringsAzat
    {

    }
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: AzatGDC (1).
Старый 12.11.2018, 19:43   #3  
AzatGDC is offline
AzatGDC
Участник
 
27 / 14 (1) ++
Регистрация: 08.11.2018
Спасибо за ответ. Но первый where это именно фильтр по первой таблице а второй лишь указатель как связать таблицы. по какому полю... а вот как наложить фильтр на вторую таблицу?
X++:
join journalStringsAzat 
              where journalStringsAzat.JournalIdAzat == journalAzat.JournalIdAzat // Область фильтров по journalStringsAzat
Это ведь как я понимаю не фильтр а аналог on в dax. поле связывания.
Старый 12.11.2018, 19:58   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,317 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от AzatGDC Посмотреть сообщение
Спасибо за ответ. Но первый where это именно фильтр по первой таблице а второй лишь указатель как связать таблицы. по какому полю... а вот как наложить фильтр на вторую таблицу?
X++:
join journalStringsAzat 
              where journalStringsAzat.JournalIdAzat == journalAzat.JournalIdAzat // Область фильтров по journalStringsAzat
Это ведь как я понимаю не фильтр а аналог on в dax. поле связывания.
Если Вы представите себе, что поле связывания и фильтр - это одно и тоже - Вам будет проще мыслить категориями системы.

X++:
join journalStringsAzat 
              where journalStringsAzat.JournalIdAzat == journalAzat.JournalIdAzat && // Область фильтров по journalStringsAzat
                         journalStringsAzat.MyField == "MyValue"
Иногда (если в select-е стоит служебное слово forceNestedLoops) join превращается во вложенные циклы. И тогда поле связывания действительно становится фильтром.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 12.11.2018 в 20:01.
За это сообщение автора поблагодарили: YoungPadawan (1).
Старый 12.11.2018, 20:30   #5  
AzatGDC is offline
AzatGDC
Участник
 
27 / 14 (1) ++
Регистрация: 08.11.2018
спасибо большое за помощь стало понятнее все)
Старый 12.11.2018, 19:58   #6  
AzatGDC is offline
AzatGDC
Участник
 
27 / 14 (1) ++
Регистрация: 08.11.2018
Все я понял
X++:
static void SQLExercise2(Args _args)
{
    JournalAzat             journalAzat;
    JournalStringsAzat      journalStringsAzat;
    
    
    while select * from journalAzat 
        where journalAzat.JournalStatusAzat == JournalStatusAzat::Closed
        join journalStringsAzat 
            where journalStringsAzat.JournalIDAzat == journalAzat.JournalIdAzat && journalStringsAzat.JournalStringsStatusAzat == JournalStringsStatusAzat::NotRegistered
    {
       print strFmt ("%1 %2 %3 %4", journalAzat.JournalIDAzat, journalAzat.JournalStatusAzat, journalStringsAzat.JournalStringsStatusAzat, journalStringsAzat.JournalStringsAzatCount);
    }
    
    pause;
}
спасибо большое. получается что дополнительные фильтры туда же где и связывание происходит нужно поместить))
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Смотрите записи докладов виртуального форума «Данные. Технологии. SQL Server 2016» MikeR DAX: База знаний и проекты 0 23.06.2016 20:00
emeadaxsupport: AX Performance - Analyzing key SQL Server configuration and database settings Blog bot DAX Blogs 0 28.09.2015 14:11
dax-lessons: Handling RecIds in SQL Server [Dynamics AX] Blog bot DAX Blogs 0 15.04.2011 20:12
SYSDATABASELOG - разобрать данные из SQL процедуры caper DAX: Программирование 2 23.11.2009 16:38
aEremenko: Нужно ли использовать секционирование в Microsoft SQL Server 2005 для DAX 3.0 Blog bot DAX Blogs 5 27.03.2007 09:37

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

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

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