首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X++奇数计数结果

X++奇数计数结果
EN

Stack Overflow用户
提问于 2016-03-16 22:48:46
回答 3查看 3.4K关注 0票数 1

当我在X++中做一个计数时,我正在经历一个非常奇怪的结果,这是我以前从未经历过的。我正在执行我认为是一个简单的计数查询,但我似乎无法得到我想要的结果。

代码语言:javascript
复制
WMSOrderTrans   orderTrans;
WMSOrderTrans   orderTransChk;
;

select count(RecId) from orderTrans group by shipmentid where orderTrans.inventTransRefId == 'XXXXXX';
info(strFmt('Count is %1', orderTrans.RecId));


while select orderTransChk group by shipmentid where orderTransChk.inventTransRefId == 'XXXXXX' {
    info(strFmt('Shipment is %1', orderTransChk.shipmentId));
}

我所选择的数据集只有一个文件,所以第一个选择是1,而不是4(这是这个transrefid存在的行数)。如果我将计数从'RecId‘改为' shipmentId ',那么就可以得到实际的shipmentId。我只想让它返回记录的计数,这就是我要求它做的。

我真的看不出我错过了什么。

在while中,我得到了我所期望的东西(托运),在循环中只有1条消息。这告诉我,带where子句的组by正在工作,但它不能解释为什么第一个count select语句没有像我预期的那样运行。

供参考,这是AX2012 R1系统。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-29 00:03:19

对于任何可能对我的回答感兴趣的人来说,这都与杰夫的回答有关。最后,我没有很好地查看数据,查询返回了正确的结果。我最初以为有一些独特的货物,但我错了。我的预期结果是错误的。文件中有4行,但这些行是该项目的唯一行,而不是货件。他们都在同一批货上。所以,真的,我自己的错,它证明了一个人真的需要仔细观察数据。

感谢所有的回应,非常感谢。

票数 2
EN

Stack Overflow用户

发布于 2016-03-17 05:18:07

我会尝试数据库同步,然后重新启动AOS。我看不出有什么明显的错误,所以这意味着一切都在反弹。

尝试通过此方法获得select语句(从内存中检查语法),然后直接检查针对SQL的查询。它使用generateOnly

代码语言:javascript
复制
select generateOnly count(RecId) from orderTrans group by shipmentid where orderTrans.inventTransRefId == 'XXXXXX';

info(orderTrans.getSQLStatement());
票数 0
EN

Stack Overflow用户

发布于 2016-03-17 22:50:27

如果我理解您试图实现的目标,那么您希望得到类似于以下SQL查询的内容:

代码语言:javascript
复制
select count(distinct shipmentid) from orderTrans 
where inventTransRefId = 'XXXXXX'

在distinct命令中,'distinct‘关键字不可用。group by子句将允许您迭代所有不同的值,但不能在其之上使用聚合。您可以使用sql连接来推送所需的确切sql命令。

在AX中,聚合值存储在使用的字段中: Count( recid ),计数将进入recid字段,否则系统可能需要动态添加缓冲区中的新字段。我认为您不能按子句对组进行聚合,因为拥有它的值是很重要的。

您可以尝试使用查询(我没有AX来测试它):

代码语言:javascript
复制
Query                query = new Query();
QueryRun             queryRun;
QueryBuildDataSource qbd;

qbd = query.addDataSource(tablenum(OrderTrans));
qbd.addRange(fieldNum(OrderTrans, InventTransId)).value("xxxx");
qbd.addSortField(fieldNum(OrderTrans, ShipmentId));
qbd.SortOrder(SortOrder::GroupBy);
queryRun = new QueryRun(query);

info(strfmt("Total Records in Query %1",SysQuery::countTotal(queryRun)));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36048436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档