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

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2012
    Messages : 39
    Points : 80
    Points
    80
    Par défaut Access et la syntaxe d'inclusion d'une sous-requête dans la close FROM
    Bonjour,
    (oups, le post serait peut être mieux dans la rubrique contributions?)

    Ayant un trou de mémoire, j'ai recherché sans succès <<Access FROM Sous-requête>>
    La solution m' étant revenue, si d'autres la cherchent...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SRF.xx,.. 
    FROM [SELECT xx, yy FROM Abc GROUP BY Abc.xx, Abc.zz ;]. AS SRF
    GROUP BY SRF.xx ...
    Important : l'espace entre le ".zz ;]. " et " AS"

    a+
    Alain

  2. #2
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : janvier 2009
    Messages : 10 735
    Points : 46 568
    Points
    46 568
    Billets dans le blog
    9
    Par défaut
    bonsoir,

    une sous-requête pour terminer la semaine, quelle bonne idée, dans la clause FROM en plus, les meilleures

    Pour illustrer avec un cas concret, prenons le classique schéma Client-Commande-DetailCommande-Produit.

    On souhaite connaître par produit, le nombre de clients distincts qui ont commandé ce produit.

    On commence par une requête intermédiaire sr, construite avec les assistants, qui ramène les couples (idClient, idProduit) sans doublon :

    Sr :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT commande.idclient, 
                    detailcommande.idproduit 
    FROM   commande 
           INNER JOIN detailcommande 
             ON commande.idcommande = detailcommande.idcommande;

    On reprend notre requête précédente sr dans la requête principale pour le comptage :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT produit.idproduit, 
           produit.nomproduit, 
           COUNT(sr.idclient) AS comptedeidclient 
    FROM   produit 
           LEFT JOIN sr 
             ON produit.idproduit = sr.idproduit 
    GROUP  BY produit.idproduit, 
              produit.nomproduit;

    Si on aime le gros SQL qui tâche, on imbrique la sous-requête sr dans la requête principale :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT produit.idproduit, 
           produit.nomproduit, 
           COUNT(sr.idclient) AS comptedeidclient 
    FROM   produit 
           LEFT JOIN (SELECT DISTINCT commande.idclient, 
                                      detailcommande.idproduit 
                      FROM   commande 
                             INNER JOIN detailcommande 
                               ON commande.idcommande = detailcommande.idcommande) sr 
             ON produit.idproduit = sr.idproduit 
    GROUP  BY produit.idproduit, 
              produit.nomproduit;

    Il a suffit de remplacer sr par le SQL correspondant entre parenthèses et d'"aliaser" avec sr:
    ( SELECT DISTINCTFROM) sr.

    Par contre je ne connaissais pas cette syntaxe avec les crochets qui doit être propre à Access:
    [SELECT DISTINCTFROM… ;]. AS sr.

    à suivre...

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2012
    Messages : 39
    Points : 80
    Points
    80
    Par défaut
    Bonsoir,
    Ca transpire le métier cette démonstration didactique.

    Effectivement si on laisse le point virgule faut utiliser [] sinon ()
    Argh, nous sommes vendredi soir...

Discussions similaires

  1. [Toutes versions] Access et la syntaxe d'inclusion d'une sous-requête dans la close FROM
    Par NeuroTransMetteur dans le forum Sondages et Débats
    Réponses: 0
    Dernier message: 16/03/2012, 20h44
  2. Besoin d'une sous requête dans la clause ORDER BY
    Par Renand dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/09/2010, 15h41
  3. Réponses: 3
    Dernier message: 05/11/2009, 13h09
  4. intégré une sous requête dans une requête
    Par Smix007 dans le forum SQL
    Réponses: 13
    Dernier message: 25/06/2007, 12h45
  5. inclure une sous requête dans une requête
    Par garsflo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/05/2007, 20h12

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