Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/06/2011, 10h08   #1
Membre du Club
 
Avatar de windmastr26
 
Homme
Développeur informatique
Inscription : juillet 2009
Messages : 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2009
Messages : 176
Points : 48
Points : 48
Par défaut TOP 1 dans LEFT JOIN

Salut à tous,

J'ai 2 requêtes qui marchent bien séparément mais qui, une fois assemblées, ne donnent pas le résultat escompté :

Code :
1
2
3
4
5
6
SELECT codearticle,codedocument,DateDocument,Delai as delaiL, lignesoldee 
FROM entetecdefournisseur,lignecdefournisseur 
WHERE lignecdefournisseur.codedocument=entetecdefournisseur.code 
AND quantite<>qtelivree 
AND codearticle='CODEART'
ORDER BY codearticle ASC, datedocument DESC
Donne :

Citation:
CODEART, CF11425, 28/06/2011, 13/07/2011, 0
CODEART, CF11411, 23/06/2011, 13/07/2011, 0
Code :
1
2
3
4
5
6
SELECT 
  a.code, 
  a.codebarre, 
  a.nom
FROM Article AS a 
WHERE a.code='CODEART'
Donne :

Citation:
CODEART, 11235235, Article n°1
Par contre, lorsque je souhaite fusionner ces résultats :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
  a.code, 
  b.DateDocument, 
  b.Delai, 
  a.codebarre, 
  a.nom
FROM Article AS a 
LEFT JOIN (
  SELECT TOP 1codearticle,codedocument,DateDocument,Delai as delai, lignesoldee 
   FROM entetecdefournisseur,lignecdefournisseur 
   WHERE lignecdefournisseur.codedocument=entetecdefournisseur.code 
   AND quantite<>qtelivree 
   ORDER BY codearticle ASC, datedocument DESC 
)  AS b 
ON a.code = b.codearticle
WHERE a.code='CODEART'
Il me renvoi :

Citation:
CODEART, , , 11235235, Article n°1
Et si j'enlève le "TOP 1" dans la jointure, j’obtiens :

Citation:
CODEART, 28/06/2011, 13/07/2011, 11235235, Article n°1
CODEART, 23/06/2011, 13/07/2011, 11235235, Article n°1

Access ne supporte-t-il pas le mot clé "TOP" dans les jointures ? De même si j'utilise un "GROUP BY" dans la jointure il ne produit strictement rien. Dans la requête principale non plus...

Pourtant mon but est bien d'obtenir une ligne pour cet article, et non pas 2...
windmastr26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 19h14   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonjour,

je ne suis pas sûr mais que donne la requête suivante ?

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT TOP 1 a.code,
             lc.datedocument,
             lc.delai,
             a.codebarre,
             a.nom
FROM   (article AS a
        LEFT JOIN entetecdefournisseur ec
          ON a.code = ec.codearticle)
       LEFT JOIN lignecdefournisseur lc
         ON ec.codearticle = lc.codedocument
WHERE  a.code = 'CODEART'
       AND lc.quantite <> lc.qtelivree
ORDER  BY lc.datedocument DESC;
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 15h37   #3
Membre du Club
 
Avatar de windmastr26
 
Homme
Développeur informatique
Inscription : juillet 2009
Messages : 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2009
Messages : 176
Points : 48
Points : 48
Hélas si l'article ne possède pas de commande en cours, la requête ne retourne aucun résultat...
windmastr26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 08h42   #4
Membre du Club
 
Avatar de windmastr26
 
Homme
Développeur informatique
Inscription : juillet 2009
Messages : 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2009
Messages : 176
Points : 48
Points : 48
Bon au final j'utilise cette requête ci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
  a.code, 
  a.codebarre, 
  a.nom, 
  e.date,
  e.delai
FROM (Article a 
  LEFT JOIN lignecdefournisseur b
  ON (b.codearticle=a.code AND quantite<>qtelivree))
    LEFT JOIN entetecdefournisseur e
    ON e.code=b.codedocument 
WHERE a.code='CODEART'
ORDER BY a.code asc, e.date desc
Et je gère directement dans le code pour ne garder qu'une seule ligne de résultat.

Merci de votre aide
windmastr26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h31.


 
 
 
 
Partenaires

Hébergement Web