IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Jointure et requête imbriquée [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 206
    Points : 243
    Points
    243
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 776
    Points : 58 175
    Points
    58 175
    Billets dans le blog
    42
    Par défaut
    Salut tarnx,

    Je pense que comme ceci, cela devrait marcher :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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…

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 206
    Points : 243
    Points
    243
    Par défaut
    Ah bah oui, tout simplement.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Update, Jointures et requête imbriqué
    Par bleuerouge dans le forum Développement
    Réponses: 1
    Dernier message: 14/01/2010, 14h49
  2. jointure entre requête imbriquée et requête parente
    Par speedev dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/03/2009, 11h24
  3. Jointures ou requêtes imbriquées ?
    Par Evocatii dans le forum Débuter
    Réponses: 2
    Dernier message: 22/02/2008, 12h56
  4. Transformer requête imbriquée en jointure
    Par Nadoo dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/05/2006, 00h41
  5. [MySQL] Erreur SQL 1064 : Requête imbriquée avec jointure !
    Par patchankito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 31/01/2006, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo