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 28/07/2011, 15h55   #1
Membre actif
 
Inscription : décembre 2009
Messages : 204
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 204
Points : 186
Points : 186
Par défaut Jointure et requête imbriquée

Bonjour à tous,

J'ai un soucis pour réaliser la requête que je veux.

Il s'agit d'une application de facturation.
Un facture est attribuée à un site (dans le sens "établissement") et peut soit concerner ce site soit ses "sous-sites" (s'il y en a).
Dans ce cas, la facture est enregistrée une première fois pour le site, puis détaillée pour les sous-sites.
Certaines factures peuvent ne pas être détaillée.
La relation Site/Sous-site n'est référencée nulle part dans la base.

Voici les tables sur lesquelles je travail :

Sites : IDSite,NomSite
Factures : NumeFact,DateFact,#SiteFact,MontantFact
LignesFactures : #FactLF, LigneLF,MontantLF
DetailsFactures : #FactDetail,#SiteDetail
LignesDetailsFactures : #FactureLD,#SiteLD,LigneLD,MontantLD

Je souhaiterais réaliser une requête permettant de faire la somme des montants groupés par site et par année avec pour résultat :
NomSite | Année | Montant

Donc, si la facture a été décomposée en sous-site, je prend SiteDetail et MontantLD , sinon je prend SiteFact et MontantLF

Pour l'instant j'ai réalisé cette requête :

Code :
1
2
3
4
5
6
7
8
SELECT NumSite,Year(DateFact), Sum(Montant)
FROM  (
   SELECT DISTINCT IIf(IsNull(SiteDetail),SiteFact,SiteDetail) As NumSite,  DateFact, IIf(IsNull(MontantLD),MontantLF,MontantLD) as Montant
   FROM  (((Factures AS F LEFT JOIN LignesFactures As I ON I.FactLF = F.NumeFact) 
   LEFT JOIN LignesDetailsFactures AS L ON F.NumeFact=L.FactLD)
   LEFT JOIN DetailsFactures AS D ON D.FactDetail= F.NumeFact 
)  
GROUP BY NumSite,Year(datefact)
Elle fonctionne bien, mais j'obtient le Numéro de site alors que je souhaite faire apparaître le nom du site.
Je ne trouve pas où réaliser la jointure à cause des conditionnelles dans le SELECT imbriqué.

Si quelqu'un à une idée, je suis preneur !
En espérant avoir été à peu près compréhensible.

Merci.
tarnx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 18h51   #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
Salut tarnx,

Je pense que comme ceci, cela devrait marcher :

Code sql :
1
2
3
4
5
6
7
8
SELECT T.NumSite, Sites.NomSite, Year(T.DateFact), Sum(T.Montant)
FROM  (
   SELECT DISTINCT IIf(IsNull(SiteDetail),SiteFact,SiteDetail) As NumSite,  DateFact, IIf(IsNull(MontantLD),MontantLF,MontantLD) as Montant
   FROM  (((Factures AS F LEFT JOIN LignesFactures As I ON I.FactLF = F.NumeFact) 
   LEFT JOIN LignesDetailsFactures AS L ON F.NumeFact=L.FactLD)
   LEFT JOIN DetailsFactures AS D ON D.FactDetail= F.NumeFact 
)  as T INNER JOIN Sites ON T.NumSite=Sites.IDSite
GROUP BY T.NumSite,Sites.NomSite, Year(T.datefact)

à voir…
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 29/07/2011, 09h14   #3
Membre actif
 
Inscription : décembre 2009
Messages : 204
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 204
Points : 186
Points : 186
Ah bah oui, tout simplement.

Merci
tarnx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h59.


 
 
 
 
Partenaires

Hébergement Web