Publicaciones etiquetadas ‘Sum’

Agrupaciones en Query

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en 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);