Imprimir

Agrupaciones en Query

Escrito por Administrador. Posted in X++

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 lineamount
from 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);