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 :

INTERSECT sous Access + Cumul d'un attribut à créer


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut INTERSECT sous Access + Cumul d'un attribut à créer
    Bonsoir à tous, voilà je suis dans la réalisation d'un projet synthèse avec les Système d'Information sous Access. Le soucis c'est que deux requêtes sur le grand nombre que nous avons possèdent des éléments que je n'arrive pas à bien utiliser sachant qu'en général j'utilise SQL et non pas Access...

    Voici les deux requêtes :

    R32 : Quelles salles de Toulouse (nom) offrent l’activité « Pilates » avec une capacité de plus de 30 places et l’activité « Spinning » avec plus de 25 places ?

    R47 : Quel(s) membre(s) cumule(nt) le plus de changement d’abonnement (nom, nombre de changement) ?

    Voici mon schéma relationnel :

    SALLE(NumS, NomS, AdresseS, CodePostalS, VilleS)
    MEMBRE(NumM, NomM, PrenomM, AdresseM, VilleM, DateDeNaissanceM, #NumS)
    ACTIVITE(CodeAct, LibelleAct, DescriptifAct, #CodeT)
    TYPE_ACTIVITE(CodeT, LibelleT)
    TYPE_ABONNEMENT(CodeAbo, LibelleAbo, DescriptifAbo, TarifAbo, DureeAbo)
    Offrir(#NumS, #CodeAct, Capacite)
    Abonner(#NumM, #CodeAbo, DateDebut, DateFin)
    Acceder(#CodeT, #CodeAbo)

    J'ai tenté de réaliser ma requête n°32 et cela ne retourne aucune erreur mais une table vide alors qu'il y'a bien en théorie un élément qui devrait passer (deux enregistrements avec la même salle qui offre les deux activités avec les deux conditions respectées)... Qu'est ce qui est faux?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT s.NumS, NomS
    FROM SALLE s, OFFRIR o, ACTIVITE a
    WHERE s.NumS IN (SELECT s.NumS FROM SALLE s WHERE Capacite > 30 AND LibelleAct = "Pilates") AND s.NumS IN (SELECT s.NumS FROM SALLE s WHERE Capacite >25 AND LibelleAct = "Spinning")
    AND s.NumS = o.NumS
    AND a.CodeAct = o.CodeAct;
    Pour la requête 47 : J'ai essayé de réaliser quelque chose en fixant le maximum de codeAbo pour une même personne mais là je vous cache pas que je n'y crois pas une seconde... Auriez vous une petite solution pour cette avant avant avant dernière requête?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT m.NomM, MAX(ta.CodeAbo)
    FROM MEMBRE m, TYPE_ABONNEMENT ta, ABONNER a
    WHERE ta.CodeAbo = a.CodeAbo
    AND m.NumM = a.NumM
    GROUP BY m.Nom
    HAVING COUNT(DISTINCT ta.CodeAbo) ;

    En tout cas merci pour votre aide prochaine !!
    Cordialement,
    A. Butheau

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonsoir,

    je ne suis pas un grand spécialiste SQL, mais avec le QBE , j'ai pu sortir le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SALLE.NumS, SALLE.NomS, SALLE.VilleS, Offrir.Capacite, ACTIVITE.LibelleAct
    FROM SALLE INNER JOIN (ACTIVITE INNER JOIN Offrir ON ACTIVITE.CodeAct = Offrir.CodeAct_FK) ON SALLE.NumS = Offrir.NumS_FK
    WHERE (((SALLE.VilleS)="Toulouse") AND ((Offrir.Capacite)>30) AND ((ACTIVITE.LibelleAct)="Pilates")) OR (((SALLE.VilleS)="Toulouse") AND ((Offrir.Capacite)>25) AND ((ACTIVITE.LibelleAct)="Spinning"));
    qui devrait faire ta requête R32.

    Cordialement,

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup le seul soucis c'est que la j'obtiens donc toutes les salles qui présent l'un OU l'autre or là on cherche les salles qui fasse les deux!!

    Par exemple la salle Zénith Toulouse propose l'activité Pilate avec une capacité de 100 places et l'activité spinning avec une capacité de 100 places.
    Et non pas l'un OU l'autre.

    Et le fait de changer le OR en AND ne fonctionne pas d'où mon incompréhension...

  4. #4
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    hello,
    pour ta première requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT s.NumS, NomS
    FROM SALLE s, OFFRIR o, ACTIVITE a
    WHERE s.NumS IN (SELECT s.NumS FROM SALLE s WHERE Capacite > 30 AND LibelleAct = "Pilates") AND s.NumS IN (SELECT s.NumS FROM SALLE s WHERE Capacite >25 AND LibelleAct = "Spinning")
    AND s.NumS = o.NumS
    AND a.CodeAct = o.CodeAct;
    je pense que ton problème vient de la structure de tes sous select puisque tu fais référence à des valeurs externes à ces mêmes sous select ( hum je ne sais pas si je suis très clair )
    je doublerai donc les critères en créant 2 requêtes indépendantes puis en les utilisant dans une requête finale
    du style
    Code : 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
     
    '====requete q_pilate
    select s.NumS, NomS
    from SALLE s, OFFRIR o, ACTIVITE a
    where 
    s.NumS = o.NumS
    AND a.CodeAct = o.CodeAct
    and Capacite > 30 AND LibelleAct = "Pilates";
     
    '=== requete q_spinning
     
    select s.NumS, NomS
    from SALLE s, OFFRIR o, ACTIVITE a
    where 
    s.NumS = o.NumS
    AND a.CodeAct = o.CodeAct and
    Capacite >25 AND LibelleAct = "Spinning";
    ensuite j'utilise les deux requêtes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select qp.NumS, qp.NomS
    from q_pilate qp q_spinning qs
    where qp.NumS=qs.NumS
    pas testé mais ça devrait le faire

Discussions similaires

  1. La clause Intersect sous Access
    Par Houssem dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/03/2008, 08h40
  2. Créer une vue sous Access 2003
    Par jlvalentin dans le forum Access
    Réponses: 5
    Dernier message: 22/08/2006, 13h29
  3. Réponses: 1
    Dernier message: 25/05/2006, 15h08
  4. [VBA-A]Créer un PDF sous Access 2002 ?
    Par gaupiche dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/05/2006, 18h54
  5. Créer un formulaire d'importation sous access
    Par Raphaëlle dans le forum Access
    Réponses: 8
    Dernier message: 25/03/2006, 15h59

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