Agrupaciones en Query
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);