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 :

Sous-requete à partir d'une requete


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 38
    Points : 22
    Points
    22
    Par défaut Sous-requete à partir d'une requete
    Bonjour, j'essaye dans un module VBA de crée une requête,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Select Nom_Sous_Requête FROM
           SELECT <sous_requête>
    j'ai pris le code sql généré par mes deux requêtes
    cela donne

    pour la première

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     SELECT Base_Fiche.Date, Sum(Base_Fiche.TT) AS SommeDeTT, Sum([Km_Arrivee]-[Km_Depart]) AS Km_Total, Base_Tournee.Groupe
    FROM Base_Tournee INNER JOIN Base_Fiche ON Base_Tournee.Tournee = Base_Fiche.No_Tournee
    GROUP BY Base_Fiche.Date, Base_Tournee.Groupe
    HAVING (((Month([Date]))=1) AND (([Formulaires]![MenuRecherche]![Annee].[value])=Year([Date])))
    Pour la 2ème (qui est faite à partir de la première)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT RqtTournee_H_Km_Mois1.Groupe, Avg(RqtTournee_H_Km_Mois1.SommeDeTT) AS MoyenneDeSommeDeTT, Avg(RqtTournee_H_Km_Mois1.Km_Total) AS MoyenneDeKm_Total
    FROM RqtTournee_H_Km_Mois1
    SELECT Base_Fiche.Date, Sum(Base_Fiche.TT) AS SommeDeTT, Sum([Km_Arrivee]-[Km_Depart]) AS Km_Total, Base_Tournee.Groupe
    FROM Base_Tournee INNER JOIN Base_Fiche ON Base_Tournee.Tournee = Base_Fiche.No_Tournee
    HAVING (((Month([Date]))=1) AND (([Formulaires]![MenuRecherche]![Annee].[value])=Year([Date]))) GROUP BY RqtTournee_H_Km_Mois1.Groupe
    ensuite j'essaye de faire une chaîne pour ma procédure VBA

    comme cela


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    str = "SELECT RqtTournee_H_Km_Mois1.Groupe, Avg(RqtTournee_H_Km_Mois1.SommeDeTT) AS MoyenneDeSommeDeTT, Avg(RqtTournee_H_Km_Mois1.Km_Total) AS MoyenneDeKm_Total" & _
    "FROM RqtTournee_H_Km_Mois100" & _
    "(SELECT Base_Fiche.Date, Sum(Base_Fiche.TT) AS SommeDeTT, Sum([Km_Arrivee]-[Km_Depart]) AS Km_Total, Base_Tournee.Groupe " & _
    "FROM Base_Tournee INNER JOIN Base_Fiche ON Base_Tournee.Tournee = Base_Fiche.No_Tournee) " & _
    "HAVING (((Month([Date])) = 1) And (([Formulaires]![MenuRecherche]![Annee].[Value]) = Year([Date]))) " & _
    "GROUP BY RqtTournee_H_Km_Mois1.Groupe;"
    et cela ne marche pas je suppose que cela vient du fait que je vois souvent que les SELECT sont extrait de table et que dans mon cas la requête principale ne voit pas le nom de la sous-requête, il faudrait que la sous-requête s'appelle RqtTournee_H_Km_Mois1

    Comment dois-je faire?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Alors en fait voici mes deux requête que j'effectue l'une après l'autre ds un module VBA

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    str = "SELECT Base_Fiche.Date, Sum(Base_Fiche.TT) AS SommeDeTT, Sum([Km_Arrivee]-[Km_Depart]) AS Km_Total, Base_Tournee.Groupe " & _
    "FROM Base_Tournee INNER JOIN Base_Fiche ON Base_Tournee.Tournee = Base_Fiche.No_Tournee " & _
    "GROUP BY Base_Fiche.Date, Base_Tournee.Groupe " & _
    "HAVING (((Month([Date])) = 1) And (([Formulaires]![MenuRecherche]![Annee].[Value]) = Year([Date])));"
     
    Set req = db.CreateQueryDef("str", str)
     
    str1 = "SELECT str.Groupe, Avg(str.SommeDeTT) AS MoyenneDeSommeDeTT, Avg(str.Km_Total) AS MoyenneDeKm_Total " & _
    "FROM str " & _
    "GROUP BY str.Groupe ;"
     
     
     
    Set req = db.CreateQueryDef("NomReq1", str1)
     
    DoCmd.OpenQuery "NomReq1"

    comment ne faire q'une seule requête,

    genre

    SELECT FROM REQ1....
    (SELECT FROM REQ2...)

    je n'y arrive pas

    Merci

  3. #3
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    voila la syntaxe (simplifiée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT <champs>
    FROM (<sous-requête>) As AliasSousRequete
     
    <champs> : AliasSousRequete.NomChamp
     
    <sous-requête> : SELECT ... FROM ...etc...
    Essaie cela dans une nouvelle requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT SousRequete.Groupe, Avg(SousRequete.SommeDeTT) AS MoyenneDeSommeDeTT, Avg(SousRequete.Km_Total) AS MoyenneDeKm_Total
    FROM 
    (
    SELECT Base_Fiche.Date, Sum(Base_Fiche.TT) AS SommeDeTT, Sum([Km_Arrivee]-[Km_Depart]) AS Km_Total, Base_Tournee.Groupe
    FROM Base_Tournee INNER JOIN Base_Fiche ON Base_Tournee.Tournee = Base_Fiche.No_Tournee
    GROUP BY Base_Fiche.Date, Base_Tournee.Groupe
    HAVING (((Month([Date]))=1) AND (([Formulaires]![MenuRecherche]![Annee].[value])=Year([Date]))) 
    ) As SousRequete 
    GROUP BY SousRequete.Groupe
    Noter que Access change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT <champs>
    FROM (<sous-requête>) As AliasSousRequete
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT <champs>
    FROM [<sous-requête>]. As AliasSousRequete
    lorsqu'on sauve la requête.

    A+

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Merci LedZep ca marche super

    Maintenant dans mon code VBA il faut que je fasse varier le mois de 1 à 12 par une boucle
    comment dois-je le faire et ou mettre cette boucle

    A+

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    Il faut faire un truc dans ce genre
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Dim Mois As Integer, strSQL As String
     
    For Mois = 1 to 12
        strSQL = "SELECT SousRequete.Groupe, Avg(SousRequete.SommeDeTT) AS MoyenneDeSommeDeTT, " & _
        "Avg(SousRequete.Km_Total) AS MoyenneDeKm_Total " & vbCrlf & _
        "FROM " & vbCrlf & _
        "(" & vbCrlf & _
        "SELECT Base_Fiche.Date, Sum(Base_Fiche.TT) AS SommeDeTT, " & _
        "Sum([Km_Arrivee]-[Km_Depart]) AS Km_Total, Base_Tournee.Groupe " & vbCrlf & _
        "FROM Base_Tournee INNER JOIN Base_Fiche ON Base_Tournee.Tournee = Base_Fiche.No_Tournee " & vbCrlf & _
        "GROUP BY Base_Fiche.Date, Base_Tournee.Groupe " & vbCrlf & _
        "HAVING (((Month([Date]))=" & CStr(Mois) & ") AND (([Formulaires]![MenuRecherche]![Annee].[value])=Year([Date]))) " & vbCrlf & _
        ") As SousRequete" & vbCrlf & _
        "GROUP BY SousRequete.Groupe" 
     
    Next

    Un petit zoom :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    "HAVING (((Month([Date]))=1) AND (([Formulaires]![MenuRecherche]![Annee].[value])=Year([Date]))) " & vbCrlf & _
    est devenu
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    "HAVING (((Month([Date]))=" & CStr(Mois) & ") AND (([Formulaires]![MenuRecherche]![Annee].[value])=Year([Date]))) " & vbCrlf & _
    A+

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

Discussions similaires

  1. optimisé une requete SQl avec une requete imbriqués
    Par fabien14 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/01/2009, 10h01
  2. Une requete à partir d'une requete
    Par pkrvz dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/04/2008, 19h39
  3. Requete Update sous Acces à partir d'une autre
    Par Le_Phasme dans le forum Access
    Réponses: 1
    Dernier message: 09/10/2006, 10h48
  4. Comment faire une requete liée avec une requete ?
    Par DavidDeTroyes dans le forum Requêtes
    Réponses: 4
    Dernier message: 18/04/2006, 13h18
  5. [TQuery]Réaliser une requete à partir d'une requete
    Par Eric SAULNIER dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/07/2004, 12h00

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