2010-01-13 6 views
2

Je ne suis pas tout à fait sûr pourquoi la requête suivante ne s'exécutera pas dans Access. Il me demande de donner la valeur de s1.skuSous-question question dans MS Access


SELECT s1.SkuApexId, s1.sku, s1.apex, s1.btw, s1.gebruikernr, q2.* 
FROM tblSkuApex AS s1, 
       (SELECT MAX(s2.begindatum) 
       FROM tblskuapex s2 
       WHERE s1.sku = s2.sku) q2 

Répondre

4

La façon dont vous le dites, vous avez besoin d'une jointure croisée à la table q2, qui est en train de changer en fonction de la valeur de chaque enregistrement s1.sku de la table s1, ce qui est inacceptable.

Je pense que vous devez placer la sous-requête q2 en tant que colonne et non en tant que table. Puisque vous récupérez une seule valeur, il pourrait être facilement mis comme ceci:

SELECT s1.SkuApexId, s1.sku, s1.apex, s1.btw, s1.gebruikernr, 
     (SELECT MAX(s2.begindatum) 
       FROM tblskuapex s2 
       WHERE s1.sku = s2.sku) as maxbegindatum 
FROM tblSkuApex AS s1 

ou mieux encore, pourquoi ne pas vous obtenez comme une agrégation normale, puisque vous demandez au maximum de la même table:

SELECT 
    s1.SkuApexId, s1.sku, s1.apex, 
    s1.btw, s1.gebruikernr, MAX(begindatum) 
FROM tblSkuApex AS s1 
group by 
    s1.SkuApexId, s1.sku, s1.apex, 
    s1.btw, s1.gebruikernr 

note: vous pouvez omettre l'alias s1 partout

+0

Cela fait beaucoup plus de sens, merci. – skerit