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
    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
    Responsable Arduino et Systèmes Embarqués

    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
    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...

###raw>template_hook.ano_emploi###