2014-04-01 43 views
1

我想用addselectionfield选择4字段。从这4个字段2是总计(总和)字段。 如何使用查询选择聚合字段?

我做了以下内容:

  date fromDate = systemDateGet(); 
      date toDate = (systemDateGet() + 25); 
      query   = new Query(); 
      qbds   = query.addDataSource(tableNum(MyTable)); 
      qbds.addSelectionField(fieldNum(MyTable, DateField)); 
      qbds.addSelectionField(fieldNum(MyTable, USDAmountField), SelectionField::Sum); 
      qbds.addSelectionField(fieldNum(MyTable, CurrencyNameField)); 
      qbds.addSelectionField(fieldNum(MyTable, EURAmountField), SelectionField::Sum); 
      qbr   = qbds.addRange(fieldNum(MyTable, DateField)); 
      qbr.value(queryRange(fromDate, toDate)); 

      queryRun  = new QueryRun(query); 

在调试,我得到下面的SELECT语句中queryRun:

SELECT SUM(EURAmountField) FROM MyTable(MyTable_1) 
WHERE ((DateField >= {ts '2014-04-01 00:00:00.000'} 
AND DateField <= {ts'2014-04-26 00:00:00.000'})) 

那么是什么原因它只选择最后一个addSelectionField和我所拥有的要做所有的字段,因为我已经写在addSelectionFields?

回答

5

没有理由(我能想到)...这应该工作,选择字段应该被添加到您的querybuilddatasource。尝试同步,编译和/或重新启动您的客户端/ aos。

您还必须做的是,按照您要选择的字段上的字段添加分组。否则AX将不知道要选择什么值,因为多个记录可能具有不同的值。例如,选择CurrencyNameField,将其添加为一个选择字段,还可以使用:

qbds.addGroupByField(fieldNum(MyTable, CurrencyNameField)); 

然后你会在CurrencyNameField领域获得的数据,但你会得到每种货币名称的总和。

这似乎工作:

Query query; 
QueryBuildDataSource qbds; 
QueryBuildRange qbr; 
QueryRun queryrun; 

date fromDate = systemDateGet(); 
date toDate = (systemDateGet() + 25); 
query   = new Query(); 
qbds   = query.addDataSource(tableNum(MyTable)); 
qbds.addGroupByField(fieldNum(MyTable, DateField)); 
qbds.addGroupByField(fieldNum(MyTable, CurrencyNameField)); 
qbds.addSelectionField(fieldNum(MyTable, DateField)); 
qbds.addSelectionField(fieldNum(MyTable, CurrencyNameField)); 
qbds.addSelectionField(fieldNum(MyTable, EURAmountField), SelectionField::Sum); 
qbds.addSelectionField(fieldNum(MyTable, USDAmountField), SelectionField::Sum); 
qbr   = qbds.addRange(fieldNum(MyTable, DateField)); 
qbr.value(queryRange(fromDate, toDate)); 

queryRun  = new QueryRun(query); 

的queryrun包含此:

SELECT DateField, CurrencyNameField, SUM(EURAmountField), SUM(USDAmountField) 
FROM MyTable(MyTable_1) GROUP BY MyTable.DateField, MyTable.CurrencyNameField 
WHERE ((DateField>={ts '2014-04-01 00:00:00.000'} 
AND DateField<={ts '2014-04-26 00:00:00.000'})) 
相关问题