Agrupaciones en Query
En algunas ocasiones nos encontramos que necesitamos utilizar el objeto Query, para realizar una consulta SQL con agrupaciones, a continuación os pongo un ejemplo de como utilizar este objeto.
Imaginemos que queremos realizar la siguiente consulta medita un objeto Query:
select custaccount,itemid, sum(lineamount)as lineamountfrom salesline
group by custaccount, itemid
having sum(lineamount) > 0
order by lineamount desc
Para ello utilizaremos la siguiente sintaxis:
Queryrun queryRun;
Query query = new Query();
SalesLine salesLine;
;
query.addDataSource(tablenum(SalesLine));
query.dataSourceTable(tablenum(SalesLine)).orderMode(OrderMode::GroupBy); //Indicamos que vamos a utilizar la opción de agrupación
query.dataSourceTable(tablenum(SalesLine)).fields().clearFieldList(); //Borramos los campos de inicialización del select
query.dataSourceTable(tablenum(SalesLine)).fields().addField(fieldnum(SalesLine, LineAmount), SelectionField::Sum); //Indicamos que el campo LineAmount se tiene que sumar
query.dataSourceTable(tablenum(SalesLine)).fields().addField(fieldnum(SalesLine, CustAccount), SelectionField::Database);
query.dataSourceTable(tablenum(SalesLine)).fields().addField(fieldnum(SalesLine, ItemId), SelectionField::Database);
query.dataSourceTable(tablenum(SalesLine)).sortClear(); //Borramos los criterios de ordenación
query.dataSourceTable(tablenum(SalesLine)).addSortField(fieldnum(SalesLine,
LineAmount), SortOrder::Descending);
query.dataSourceTable(tablenum(SalesLine)).addSortField(fieldnum(SalesLine,
CustAccount), SortOrder::Descending);
query.dataSourceTable(tablenum(SalesLine)).addSortField(fieldnum(SalesLine,
ItemId), SortOrder::Ascending);
query.dataSourceTable(tablenum(SalesLine)).addRange(fieldnum(SalesLine,
LineAmount)).value('> 0');
queryRun = new QueryRun(query);


