0

也许我错过了一些简单的东西,但是有没有办法在 AX 中编写嵌套查询?我尝试了一些我认为可行的语法,但没有运气。

以下标准 SQL 语句将完成我想要做的事情,但我需要在 AX 中执行此操作,而不是 SQL。

SELECT table1.column1A, table1.column1B, 
    (SELECT Top 1 column2B FROM table2 
        WHERE table1.column1A = table2.column2A 
        ORDER BY table2.column1A) 
    AS lookupResult 
FROM table1

我的问题是 table1 与 table2 具有一对多的关系,并且由于 AX 没有我知道的 DISTINCT 函数,因此在使用 JOIN 语句时我会收到每条记录的许多副本。

谢谢

4

3 回答 3

5

AX 不支持嵌套查询。

绕过缺失的 distinct 的一种方法是使用 group by(假设 column2B 的最大值很有趣):

while select column1A, column1B from table1
    group column1A, column1B
    join max-of(column2B) from table2
    where table2.column2A == table1.column1A     
{
    ...
}

另一种方法是table1在表单或报告中使用显示方法。

display ColumnB column2B()
{    
    return (select max-of(column2B) from table2
                where table2.column2A == this.column1A).column2A;
}

性能不如第一种解决方案,但可以接受。

于 2011-08-30T11:24:53.430 回答
2

正如上一个回复中提到的,group-by 是您可以获得的最接近不同功能的方法。如果您出于某种原因需要更简单的查询,或者如果您需要将表或查询对象用作表单或报表上的数据源,您可以考虑在 AOT 中创建一个包含分组依据的视图。然后,您可以使用该视图轻松加入查询对象或表单数据源等...

于 2011-08-31T04:56:56.427 回答
1

Ax2012 支持视图中的计算列,您可以使用 SysComputedColumn 类来构建您想要的查询

于 2011-09-04T16:20:45.353 回答