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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2003, 09:56   #1  
Swetik is offline
Swetik
Участник
 
221 / 10 (1) +
Регистрация: 31.07.2002
Выборка записей
Аксапта 3.0

Вопрос может быть простой, но ...

Есть таблицы А(Поле а_Id ), Б(Поле a_Id), С(Поле a_Id)

Можно ли в одном запросе вернуть все записи таблицы А, записи которой по а_Id есть и в Б и в С ?
Т.е. A.a_Id == Б.a_Id &&
A.a_Id == C.a_Id
Старый 23.12.2003, 11:06   #2  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,233 / 974 (37) +++++++
Регистрация: 03.04.2002
можно
Старый 23.12.2003, 11:17   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
PHP код:
SELECT DISTINCT FROM А
WHERE EXISTS
      
(SELECT FROM Б
       WHERE EXISTS
             
(SELECT FROM С
              WHERE С
.А_ID Б.A_ID)
             AND 
Б.А_ID А.А_ID
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 23.12.2003, 11:22   #4  
Swetik is offline
Swetik
Участник
 
221 / 10 (1) +
Регистрация: 31.07.2002
Подскажите, пожалуйста,
как к нижеприведенному добавить правильно таблицу С

Query query = new Query();
QueryBuildDataSource qbd = query.addDataSource(tablenum(A));
qbd.addDataSource(tablenum(Б));
qbds.joinMode(JoinMode::InnerJoin);
qbds.addLink(fieldNum(А, а_Id), fieldNum(Б, а_Id));
Старый 23.12.2003, 11:23   #5  
Swetik is offline
Swetik
Участник
 
221 / 10 (1) +
Регистрация: 31.07.2002
Поправка
qbds.joinMode(JoinMode::ExistsJoin);
Старый 23.12.2003, 11:30   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
PHP код:
...
qbds qbds.childDataSourceNo(1);
qbds.addDataSource(tablenum(С));
qbds.joinMode(JoinMode::ExistsJoin);
qbds.addLink(fieldNum(Ба_Id), fieldNum(Са_Id)); 
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 23.12.2003, 11:36   #7  
Swetik is offline
Swetik
Участник
 
221 / 10 (1) +
Регистрация: 31.07.2002
Спасибо, а в случае , если

a_Id - уникальный идентификатор в таблице А,
какая то часть этих записей есть в Б, какая-то в С.

Т.е. не всегда Б.а_id = C.a_Id ?
Старый 23.12.2003, 11:40   #8  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Тогда добавляйте С как childDataSource не к Б, а к А

Собственно тут смысл какой. Если С - childDataSource для Б, получается выборка строк А с A_Id, содержащимися в Б И в С. Если С - childDataSource для А - выборка строк А с А_Id, содержащимися в Б ИЛИ в С.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 23.12.2003, 12:06   #9  
Swetik is offline
Swetik
Участник
 
221 / 10 (1) +
Регистрация: 31.07.2002
Простите, но все равно не много не пойму

У меня и С , и Б - childDataSource для А .
Вопрос , как откатиться к А (не к child), чтобы сделать связь с С ?

На реалиях : Выбрать записи в InventDim (A), записи которых есть в PurchLine (Б) или SalesLine (С)
Старый 23.12.2003, 12:56   #10  
Swetik is offline
Swetik
Участник
 
221 / 10 (1) +
Регистрация: 31.07.2002
Что бы не быть голословной :

QueryRun exportQueryRun;
Query query = new Query();
QueryBuildDataSource qbDSb, qbDSc, qbd = query.addDataSource(tablenum(InventDim));
InventDim inv;


qbDSb = qbd.addDataSource(tablenum(PurchLine));
qbDSb.addLink(fieldNum(InventDim, InventDimId), fieldNum(PurchLine, InventDimId));
qbDSb.joinMode(JoinMode::InnerJoin);
qbDSb.fetchMode(1);

qbDSc = qbd.addDataSource(tablenum(SalesLine));
qbDSc.addLink(fieldNum(InventDim, InventDimId), fieldNum(SalesLine, InventDimId));
qbDSc.joinMode(JoinMode::InnerJoin);
qbDSc.fetchMode(1);
exportQueryRun = new QueryRun(query);
while (exportQueryRun.next())
{
inv = exportQueryRun.get(tableNum(InventDim));
print inv.inventDimId;
}
Посмотрите, что получиться
Старый 23.12.2003, 13:36   #11  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
да, погорячился, извините
Вы хотите сказать, что вернулись не все записи?
Цитата:
Можно ли в одном запросе вернуть все записи таблицы А, записи которой по а_Id есть и в Б и в С ?
-------------
Ошибка fetchMode(0);

Кстати, Вы уверены, что вам нужны именно аналитики строк заказов\закупок, а не проводок?
Старый 23.12.2003, 14:26   #12  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
fetchMode(0), ИМХО, проблему не решит. Кстати, для какого DataSource поставить fetchMode(0)?

По-моему, дело в том, что в случае двух и более вложенных DataSource Axapta забивает на установленный JoinMode и выполняет OuterJoin.

Swetik, вам могу посоветовать только дополнительную проверку после get:
PHP код:
...
    
PurchLine purch;
    
SalesLine sales;
...
    while (
exportQueryRun.next())
    {
        
inv exportQueryRun.get(tableNum(InventDim));
        
purch exportQueryRun.get(tableNum(PurchLine));
        
sales exportQueryRun.get(tableNum(SalesLine));
        if (
purch.RecId || sales.RecId)
            
info(inv.inventDimId);
    }
... 
Кстати, согласен с Wamr, делайте join с InventTrans. Если уж вам так хочется получить только строки покупок и продаж, можно наложить фильтр на InventTrans.TransType.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 23.12.2003, 14:32   #13  
Swetik is offline
Swetik
Участник
 
221 / 10 (1) +
Регистрация: 31.07.2002
Спасибо всем,
после долгих мытарств, действительно всплыла таблица InventTrans , по которой немного проще (при связи с InventDim) , добыть InventDim по Закупкам и Заказам...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Настройка прав доступа на уровне записей Pan DAX: Администрирование 19 12.11.2006 11:10
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27
Запрос на форме как Select или готовая выборка в форму? rohlenko DAX: Программирование 9 23.06.2005 13:38
Хранение отмеченных записей Pavel Pustovalov DAX: Программирование 9 17.05.2005 21:56
Lookupы при большом количестве записей выводимой таблицы Pavlo AKA Panok DAX: Программирование 9 07.05.2002 22:02

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

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

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