Axapta 如何使用查询选择聚合字段?
我正在尝试使用addselectionfield选择4个字段。这4个字段中的2个是聚合(总和)字段。 我正在做以下工作:Axapta 如何使用查询选择聚合字段?,axapta,x++,dynamics-ax-2012,Axapta,X++,Dynamics Ax 2012,我正在尝试使用addselectionfield选择4个字段。这4个字段中的2个是聚合(总和)字段。 我正在做以下工作: date fromDate = systemDateGet(); date toDate = (systemDateGet() + 25); query = new Query(); qbds = query.addDataSource(ta
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);
调试时,我在queryRun中得到以下select语句:
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'}))
从MyTable(MyTable_1)中选择总和(EURAmountField)
其中((日期字段>={ts'2014-04-01 00:00:00.000'}
和DateField没有理由(我能想到)…这应该行得通,selectionfield应该添加到querybuilddatasource中。尝试同步、编译和/或重新启动客户端/aos
不过,您还必须在要选择的字段上添加group by字段。否则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'}))
选择日期字段、CurrencyNameField、总和(EURAmountField)、总和(USDAmountField)
根据MyTable.DateField、MyTable.CurrencyNameField从MyTable(MyTable_1)组
其中((日期字段>={ts'2014-04-01 00:00:00.000'}
和DateField没有理由(我能想到)…这应该行得通,selectionfield应该添加到querybuilddatasource中。尝试同步、编译和/或重新启动客户端/aos
不过,您还必须在要选择的字段上添加group by字段。否则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'}))
选择日期字段、CurrencyNameField、总和(EURAmountField)、总和(USDAmountField)
根据MyTable.DateField、MyTable.CurrencyNameField从MyTable(MyTable_1)组
其中((日期字段>={ts'2014-04-01 00:00:00.000'}
和日期字段