2011-08-29 79 views
0

也许我错过了简单的东西,但有没有办法在AX中编写嵌套查询?我尝试了一些我认为会起作用的语法,但没有运气。Dynamics 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 

我的问题是,表1与表2一个一对多的关系,因为AX不具有独特的功能,我所知道的,我收到使用时,每个记录的许多副本JOIN语句。

谢谢

+0

你不在top1选择上指定一个排序,这意味着你从table2中得到columb2B的任意值。 –

回答

5

AX不支持嵌套查询。绕过失踪不同

一种方式是通过(假设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; 
} 

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

2

正如在前面的回复中提到的,group-by是最接近独特功能的。如果您出于某种原因需要更简单的查询,或者需要将表或查询对象用作表单或报表上的数据源,则可能会在AOT中创建一个包含group-by的视图。然后,您可以使用该视图轻松地加入到查询对象或数据源的形式等因素对...