2011-08-29 5 views
0

Peut-être qu'il me manque quelque chose de simple, mais existe-t-il un moyen d'écrire une requête imbriquée dans AX? J'ai essayé une syntaxe que je pensais fonctionner, mais sans chance. L'instruction SQL standard suivante accomplirait ce que j'essaie de faire, mais je dois le faire dans AX, pas SQL.Requête imbriquée Dynamics AX

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

Mon problème est que table1 a un à plusieurs avec table2, et puisque AX ne possède pas de fonction DISTINCT que je connais, je reçois beaucoup de copies de chaque enregistrement lors de l'utilisation d'un L'instruction JOIN.

Merci

+0

Vous n'avez pas spécifiez un tri sur la sélection top1, ce qui signifie que vous obtenez une valeur arbitraire de columb2B à partir de table2. –

Répondre

5

requêtes imbriquées ne sont pas pris en charge dans AX.

Une façon de contourner le distinct manquant est d'utiliser un groupe par (en supposant la valeur maximum de column2B est intéressante):

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

Une autre méthode serait d'utiliser une méthode d'affichage sur table1 sous la forme ou le rapport.

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

La performance est inférieure à la première solution, mais elle peut être acceptable.

2

Comme mentionné dans la réponse précédente, le paramètre group-by est le plus proche d'une fonction distincte. Si vous avez besoin d'une requête plus simple pour une raison ou si vous avez besoin d'une table ou d'un objet de requête à utiliser comme source de données dans un formulaire ou un rapport, vous pouvez créer une vue dans AOT, qui contient le groupe. Vous pouvez ensuite utiliser ce point de vue de rejoindre facilement sur un objet de requête ou sous forme datasource etc ...

1

Ax2012 a le soutien de computed columns dans les vues, vous pouvez utiliser la classe SysComputedColumn pour construire la requête que vous voulez

Questions connexes