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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.03.2008, 13:54   #1  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
:( query and grou by по 2-м таблицам
Доброе время суток!
Задача: выбрать строки из одной таблици и кол-во строк соответстующие в другой таблице.
Объясните почему не я вижу данные одной таблицы, а данные второй таблица с суммой строк нет. Что не так делаю?

X++:
 query = new Query();

    queryBuildDataSource = query.addDataSource(tableNum(PurchTable));
    queryBuildDataSource.addSortField(fieldNum(PurchTable, PurchId));
    queryBuildDataSource.addSortField(fieldNum(PurchTable, OrderAccount));
    queryBuildDataSource.addSortField(fieldNum(PurchTable, DeliveryDate));
    queryBuildDataSource.addRange(fieldnum(PurchTable,OrderAccount)).value(stVendAccount.valueStr());// поставщик
    queryBuildDataSource.addRange(fieldnum(PurchTable,PurchStatus)).value(queryvalue(PurchStatus::Backorder)); // Статус закупки открыто
    queryBuildDataSource.addRange(fieldnum(PurchTable,DeliveryDate)).value(queryRange(Str2Date(DateStart.valueStr(),123),Str2Date(DateEnd.valueStr(),123))); // Статус закупки открыто
    queryBuildDataSource2 = queryBuildDataSource.addDataSource(tableNum(PurchLine));
    //queryBuildDataSource2.relations(true);
    queryBuildDataSource2.addLink(fieldNum(PurchLine, PurchId),fieldNum(PurchTable, PurchId));

queryBuildDataSource2.addSelectionField(fieldNum(PurchLine, LIneNum), SelectionField::Count);
    queryBuildDataSource2.orderMode(OrderMode::GroupBy);
    
    queryBuildDataSource2.addRange(fieldnum(PurchLine,ItemId)).value(stItemId.valueStr()); // номенкалатура
    queryBuildDataSource2.addRange(fieldnum(PurchLine,PurchStatus)).value(queryvalue(PurchStatus::Backorder)); //статус
    queryBuildDataSource2.addSortField(fieldNum(PurchLine, ItemId));
    queryBuildDataSource2.addSortField(fieldNum(PurchLine, PurchStatus));

    queryBuildDataSource2.joinMode(JoinMode::ExistsJoin);
 
    queryRun = new QueryRun(query);
    ItogTable_BRR.selectForUpdate(true);
    delete_from ItogTable_BRR;

    while(queryRun.next())
    {
            _PurchTable = queryRun.get(tableNum(PurchTable));
            //_PurchLine = queryRun.get(tableNum(PurchLine));
              _PurchLine = queryRun.getNo(2);
    }
Старый 24.03.2008, 14:29   #3  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
да я вижу что не отрабатывает ... а как сделать чтоб отрабатывало? ... хочу всё сделать единым запросом... не разбивая ...
Старый 24.03.2008, 14:31   #4  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
я его убирал толку нет ...
Старый 24.03.2008, 14:33   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
ну как минимум отказаться от exists джоина. он вам по смыслу не нужен...


Делаете иннер джоин и групперуете всё как вам надо. (и не надо пытаться сделать одну таблицу ордер бай, а вторую груп бай, как вы похоже это хотите сделать в примере )

А то что вы написали, с точки зрения SQL - какой-то полный нонсенс...
__________________
Zhirenkov Vitaly
Старый 24.03.2008, 14:46   #6  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
да я тут и так и так крутил вертел ... уже всё перепробовал .. не даёт данные второй таблици и всё тут..
Старый 24.03.2008, 14:49   #7  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
оппа....кажись получаеться .... продолжаю :-) ..... Спасибо всем!
Старый 24.03.2008, 14:52   #8  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
аннн нет ...убираю групировку данные выходят по второй таблице...а как получить сумму строк?
Старый 24.03.2008, 15:07   #9  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
убираю групировку данные выходят по второй таблице
Не надо бросаться отрывочными фразами, смысл которых вряд ли кто-нибудь поймёт Куда они выходят, как выходят, зачем? )

Посмотри вот этот код, я там чуток поправил на вскидку, может поможет:

Код:
static void Job1(Args _args)
{
    Query query;
    PurchTable  _purchTable;
    PurchLine   _purchLine;
    QueryRun    queryRun;
    queryBuildDataSource    queryBuildDataSource, queryBuildDataSource2;
    ;


    query = new Query();

    queryBuildDataSource = query.addDataSource(tableNum(PurchTable));

    queryBuildDataSource.orderMode(OrderMode::GroupBy);

    queryBuildDataSource.addSortField(fieldNum(PurchTable, PurchId));
    queryBuildDataSource.addSortField(fieldNum(PurchTable, OrderAccount));
    queryBuildDataSource.addSortField(fieldNum(PurchTable, DeliveryDate));

    queryBuildDataSource.addRange(fieldnum(PurchTable,OrderAccount)).value(queryvalue("Дровосек"));// поставщик
    queryBuildDataSource.addRange(fieldnum(PurchTable,PurchStatus)).value(queryvalue(PurchStatus::Backorder)); // Статус закупки открыто
    queryBuildDataSource.addRange(fieldnum(PurchTable,DeliveryDate)).value(queryvalue(14\12\2002)); // Статус закупки открыто

    queryBuildDataSource2 = queryBuildDataSource.addDataSource(tableNum(PurchLine));
    //queryBuildDataSource2.relations(true);

    queryBuildDataSource2.addLink(fieldNum(PurchLine, PurchId),fieldNum(PurchTable, PurchId));

    queryBuildDataSource2.addSelectionField(fieldNum(PurchLine, LIneNum), SelectionField::Count);
//    queryBuildDataSource2.orderMode(OrderMode::GroupBy);

    queryBuildDataSource2.addRange(fieldnum(PurchLine,ItemId)).value(queryvalue("Плита ДСП 1,0х0,6")); // номенкалатура
    queryBuildDataSource2.addRange(fieldnum(PurchLine,PurchStatus)).value(queryvalue(PurchStatus::Backorder)); //статус
    queryBuildDataSource2.addSortField(fieldNum(PurchLine, ItemId));
    queryBuildDataSource2.addSortField(fieldNum(PurchLine, PurchStatus));

    queryBuildDataSource2.joinMode(JoinMode::InnerJoin);

    info (queryBuildDataSource.toString());
    info (queryBuildDataSource2.toString());

    queryRun = new QueryRun(query);

    while(queryRun.next())
    {
    _PurchTable = queryRun.get(tableNum(PurchTable));
    //_PurchLine = queryRun.get(tableNum(PurchLine));
    _PurchLine = queryRun.getNo(2);
    }

}
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: mazzy (2).
Старый 24.03.2008, 16:31   #10  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Огромное спасибо! Разобрался... Незнаю что без вас делал бы :-)
 


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

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

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