Показать сообщение отдельно
Старый 01.12.2005, 11:23   #1  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
Cool Проблема с составлением Query
Создаю query:

Код:
    PurchLine               purchLine;
    InventTable             inventTable;
    InventDim               inventDim;

    QueryBuildDataSource    qbdsPurchTable,
                                         qbdsPurchLine,
                                         qbdsInventTable,
                                         qbdsInventTableModule,
                                         qbdsInventDim;

    Query                   query;
    QueryRun                queryRun;
    ;

    query = new Query();
    qbdsPurchTable = query.addDataSource(tableNum(PurchTable));
    qbdsPurchTable.addRange(fieldNum(PurchTable, DeliveryDate)).value(queryValue(30\11\2005));

    qbdsPurchLine = qbdsPurchTable.addDataSource(tableNum(PurchLine));
    qbdsPurchLine.joinMode(JoinMode::InnerJoin);
    qbdsPurchLine.fetchMode(QueryFetchMode::One2One);
    qbdsPurchLine.addLink(fieldNum(PurchTable, PurchId), fieldNum(PurchLine, PurchId));
    qbdsPurchLine.orderMode(OrderMode::GroupBy);
    qbdsPurchLine.addSelectionField(fieldNum(PurchLine, PurchQty), SelectionField::Sum);


    qbdsInventTable = qbdsPurchLine.addDataSource(tableNum(InventTable));
    qbdsInventTable.joinMode(JoinMode::InnerJoin);
    qbdsInventTable.fetchMode(QueryFetchMode::One2One);
    qbdsInventTable.addLink(fieldNum(PurchLine, ItemId), fieldNum(InventTable, ItemId));
    qbdsInventTable.orderMode(OrderMode::GroupBy);
    qbdsInventTable.addSortField(fieldNum(InventTable, ItemName));
    qbdsInventTable.addSortField(fieldNum(InventTable, ItemId));

    qbdsInventTableModule = qbdsInventTable.addDataSource(tableNum(inventTableModule));
    qbdsInventTableModule.joinMode(JoinMode::InnerJoin);
    qbdsInventTableModule.fetchMode(QueryFetchMode::One2One);
    qbdsInventTableModule.addLink(fieldNum(InventTable, ItemId), fieldNum(inventTableModule, ItemId));

    qbdsInventDim = qbdsPurchLine.addDataSource(tableNum(InventDim));
    qbdsInventDim.joinMode(JoinMode::InnerJoin);
    qbdsInventDim.fetchMode(QueryFetchMode::One2One);
    qbdsInventDim.addLink(fieldNum(PurchLine, InventDimId), fieldNum(InventDim, InventDimId));
    qbdsInventDim.orderMode(OrderMode::GroupBy);
    qbdsInventDim.addSortField(fieldNum(InventDim, InventDimId));



    queryRun = new QueryRun(query);
    while(queryRun.next())
    {
        purchLine   = queryRun.get(tableNum(PurchLine));
        inventTable = queryRun.get(tableNum(InventTable));
        inventDim   = queryRun.get(tableNum(InventDim));
        info(strfmt("%1 ~ %2 ~ %3 ~ %4", inventTable.ItemName, 
                                         inventTable.ItemId,
                                         purchLine.PurchQty,
                                         inventDim.inventDimId ));
    }
Проблема заключается в том, что в таком виде результат выборки получается без группировки по InventDim, если же закомментировать добавление в query InventTableModule, то группировка по InventDim работает, чего я , собственно, и хочу добиться. Смотрел получающийся в query запрос - все вроде нормально, а может я sql недостаточно хорошо знаю...