Показать сообщение отдельно
Старый 24.05.2013, 15:55   #1  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
! Query для 3-х таблиц с группировкой.
Есть задача: построить отчёт на основании 3-х таблиц с определёнными условиями. Условия пока опустим. Нужно объединить 3 таблицы между собой с помощью query. Второй день бьюсь, как только не соединял - ничего не выходит.
Последняя версия такова:

X++:
Queryrun main_query(boolean _count_query = false)
{
    Query query   =      new Query();
    QueryBuildDataSource qbds_vendsplistjour,
                         qbds_vendsplisttrans,
                         qbds_vendinvoicetrans;
    QueryBuildRange      qbr;
    ;

    qbds_vendinvoicetrans  = query.addDataSource(tablenum(VendInvoiceTrans));
   qbds_vendinvoicetrans.addSelectionField(fieldnum(VendInvoiceTrans,Qty), SelectionField::Sum);
    qbds_vendinvoicetrans.orderMode(OrderMode::GroupBy);
    qbds_vendinvoicetrans.addSortField(fieldnum(VendInvoiceTrans,ItemId));
    qbds_vendinvoicetrans.addSortField(fieldnum(VendInvoiceTrans,InternalSp));
    qbds_vendinvoicetrans.addSortField(fieldnum(VendInvoiceTrans,Qty));

    qbds_vendsplisttrans  = qbds_vendinvoicetrans.addDataSource(tablenum(VendSpListTrans));
    qbds_vendsplisttrans.addLink(fieldnum(VendInvoiceTrans,InternalSp),fieldnum(VendSpListTrans,InternalSp));

    qbds_vendsplistjour = qbds_vendsplisttrans.addDataSource(tablenum(VendSpListJour));
    qbds_vendsplistjour.relations(true);

    if (_count_query)
    {
        qbds_vendinvoicetrans.addSelectionField(fieldnum(VendInvoiceTrans,Recid),SelectionField::Count);
    }

    info(qbds_vendinvoicetrans.toString());
    return (new QueryRun(query));
}
Он выдаёт такой sql запрос:
X++:
SELECT FIRSTFAST SUM(Qty), COUNT(RecId) FROM VendInvoiceTrans GROUP BY VendInvoiceTrans.ItemId ASC, VendInvoiceTrans.InternalSp ASC, VendInvoiceTrans.Qty ASC JOIN FIRSTFAST * FROM VendSpListTrans WHERE VendInvoiceTrans.InternalSp = VendSpListTrans.InternalSp JOIN FIRSTFAST * FROM VendSpListJour WHERE VendSpListTrans.InternalSp = VendSpListJour.InternalSp
который я подправил, чтобы проверить в sqlms


X++:
SELECT  SUM(VendInvoiceTrans.Qty), COUNT(VendInvoiceTrans.RecId) 
FROM VendInvoiceTrans 

  JOIN  VendSpListTrans 
  on VendInvoiceTrans.InternalSp = VendSpListTrans.InternalSp 
  JOIN VendSpListJour
  on VendSpListTrans.InternalSp = VendSpListJour.InternalSp
--GROUP BY VendInvoiceTrans.ItemId ,
-- VendInvoiceTrans.InternalSp
В sqlms он отрабатывает и выдаёт результаты.

Прошу помочь или подтолкнуть в нужную сторону, куда копать. Спасибо заранее.

С уважением.



Нашёл на форуме в теме такую фразу

Цитата:
Сообщение от Wamr Посмотреть сообщение
В SQL при использовании GROUP BY нельзя получить данные, которые не входят в список агрегирующих полей (addSortField) или функций (SelectionField).
Так что Аксапта тут не виновата
Добавил нужные мне поля, которые хочу выбрать из данной таблицы - ничего(

Последний раз редактировалось user_ax; 24.05.2013 в 16:02.