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

Access Discussion :

requete acces


Sujet :

Access

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut requete acces
    Bonjour,

    J'ai fais un petit programme c'est à dire que j'ai créer des tables, .. et ce que je veux dans la requete c'est pouvoir afficher le numero de la clinique qui comprend les trois numero de specialite qui sont 100 et 600 et 700.

    Plus précisement quels sont les numero de clinique qui ont la specilaite 100, 600 et 700.

    J'ai essayé 100 and 600 and 700 dans la requete et il m'affiche une table vide avec n0clinique et n° specialite mais quand je regarde la table je trouve bien que pour la clinique 30 50 70 qui ont 100 et 600 et 700.

    Merci pour votre aide

  2. #2
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    salut
    c'est avec Or et non And
    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 419
    Points : 508
    Points
    508
    Par défaut
    salut

    sans la structure des relations entre tables, c'est dur de répondre

    Est ce que no specialite est dans la table clinique ou une autre table ?

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut re
    Or fonctionne mais c'est pas ce que je veux car la cela donne les n0 dans le cas ou l'on a soit 100 soit 600 ou soit 700 donc un Ou et non un Et.

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut detail
    Bonjour,

    J'ai 4 tables:

    Clique (n° clinique, nom, nblits, ville)
    Implantation (ville, dpt, nbhab)
    service (n°specialité, n°clinique)
    Specialité (n° specialite, libelle)

    et moi je veus faire le lien entre n° specialite et n° clinique

    il me aut les n° clinique qui ont les n° specialite 100 600 et 700.

  6. #6
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Ce que tu proposes:
    Clique (n° clinique, nom, nblits, ville)
    Implantation (ville, dpt, nbhab)
    service (n°specialité, n°clinique)
    Specialité (n° specialite, libelle)
    ce que je propose:
    Implantation (RefImplantation,ville, dpt, nbhab)
    Clinique (n° clinique, nom, nblits, RefImplantation)
    service (n°service, n°clinique, nomservice)
    Specialité (n° specialite, n°service, libelle)
    avec une relation de 1 à plusieurs
    @+

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut re
    Bonjour,

    Je ne voit pas ce qui change par rapport à toute à l'heure.

    En + c'est un exemple que j'ai pris d'un bouquin.

    Il y avait juste les 4 tables que je t'est montré.

    Mais le code sera toujours le même! Dans ce cas cela ne va pas résoudre mon pb.



    Bye a+

  8. #8
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut re
    Bonjour,

    Juste une petite question comme cela ne fais que quelques jours que je j'essaie de comprendre acces.

    RefImplantation je le met en cle primaire

    PS:je voulais aussi savoir entre access et oracle vaut mieux créer une base de donnée avec oracle ou acces pour quelqu'un qui n'a jamais fais de programmation et qui se retrouve à faire un stage dans la création de base de donnée.

    Bye a+

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Re: requete acces
    Bonsoir,
    Citation Envoyé par emel
    Plus précisement quels sont les numero de clinique qui ont la specilaite 100, 600 et 700.
    Je te propose la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT service.n_clinique, Count(service.n_specialité) AS cpte_specialités
    FROM service
    WHERE (((service.n_specialité)=100 Or (service.n_specialité)=600 Or (service.n_specialité)=700))
    GROUP BY service.n_clinique
    HAVING (((Count(service.n_specialité))=3));

  10. #10
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut re
    Salut,

    cela ne marche pas il me dit qu'il faut placer la sous requete entre parenthèse.

    Comment faire?

    Bye a+

  11. #11
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    emel a ecrit:
    RefImplantation je le met en cle primaire
    Oui en clé primaire
    ton pb est beaucoup plus un pb de conception que de requete
    @+

  12. #12
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut re
    si kj t'envoie ma base est ce que que tu peux me dire ce ki cloche

  13. #13
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut re
    j'ai essayé mais cela ne marche pas non plu

  14. #14
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Et Re-re-re: Re: re
    Bonjour,

    Concernant ma proposition de requête, tu réponds...
    Citation Envoyé par emel
    cela ne marche pas il me dit qu'il faut placer la sous requete entre parenthèse.

    Comment faire?
    Attention, ma proposition est à adapter à ton cas. En particulier les noms de champs que j'ai utilisés ne sont peut être pas identiques à ceux que tu utilises.

    Alors, j'ai essayé de me rapprocher de tes posts précédents.
    Le code SQL est produit par Access (copier/coller), donc sa syntaxe devrait être correcte (ici il n'y a pas de sous-requête):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT service.[n° clinique], Count(service.[n° specialite]) AS cpte_specialites 
    FROM service 
    WHERE (((service.[n° specialite])=100 Or (service.[n° specialite])=600 Or (service.[n° specialite])=700)) 
    GROUP BY service.[n° clinique] 
    HAVING (((Count(service.[n° specialite]))=3));

  15. #15
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    Je n'y arrive pas

  16. #16
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    que represente cpte specialité

  17. #17
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par emel
    que represente cpte specialité
    Mouais. .. je crois qu'il va falloir faire preuve de pédagogie ...
    Je vais essayer en reprenant et en décomposant la requête SQL proposée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT service.[n° clinique], Count(service.[n° specialite]) AS cpte_specialites 
    FROM service 
    WHERE (((service.[n° specialite])=100 Or (service.[n° specialite])=600 Or (service.[n° specialite])=700)) 
    GROUP BY service.[n° clinique] 
    HAVING (((Count(service.[n° specialite]))=3));
    et que j'applique à la table service remplie comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    n° specialité   n° clinique
     
      100	          30
      100	          50
      200	          30
      300	          50
      500	          50
      500	          60
      600	          30
      600	          50
      600	          60
      700	          30
      700	          50
      900	          80
    Première étape: sélectionner les lignes des services avec les spécialités qui nous intéressent.

    Pour l'instant, je simplifie la requête SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT service.[n° clinique], service.[n° specialite] FROM service 
    WHERE service.[n° specialite]=100 Or service.[n° specialite]=600 Or service.[n° specialite]=700;
    Le résultat de cette requête sélection est donné ci-dessous.
    A ce stade, la consultation de cette liste permet de connaître les n° des cliniques qui pratiquent AU MOINS UNE des spécialités recherchées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    n° specialité   n° clinique
     
      100	          30
      100	          50
      600	          30
      600	          50
      600	          60
      700	          30
      700	          50
    Deuxième étape: à partir de la liste précédente, déterminer pour chaque clinique, le NOMBRE de spécialités ciblées.

    Un humain produira la liste suivante où les spécialités sont regroupées avec le n° de clinique concerné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    n° specialité   n° clinique
     
      100	          30
      600	          "
      700	          "
      -----------------------
      100	          50
      600	          "
      700	          "
      -----------------------
      600	          60
    Mais un système de BD relationnelles ne sait pas produire directement un tel résultat.
    En revanche il sait compter le nombre de spécialités associées à chaque clinique grâce à une requête de regroupement des données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT service.[n° clinique], Count(service.[n° specialite]) AS cpte_specialites 
    FROM service 
    WHERE service.[n° specialite]=100 Or service.[n° specialite]=600 Or service.[n° specialite]=700 
    GROUP BY service.[n° clinique];
    Le regroupement (clause GROUP BY) est réalisé sur le n° de clinique.
    Le dénombrement (opérateur Count) est appliqué sur le n° de spécialité.
    Ce nombre de spécialités est en fait une nouvelle information qu'il nous faut nommer d'où l'instruction AS cpte_specialites qui indique comment appeler ce champ calculé. Ce qui donne le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    n° clinique   cpte_specialites
       30                    3
       50                    3
       60                    1
    Troisième étape: ne retenir que les cliniques qui pratiquent les 3 spécialités.

    A partir du résultat précédent, nous ne voulons retenir que les n° de clinique pour lesquels le champ cpte_specialites est égal à 3.
    On utilise la clause HAVING qui filtre notre liste en appliquant un ultime critère appliqué aux données agrégées (ici, le nombre de spécialités). D'où la requête SQL complète.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT service.[n° clinique], Count(service.[n° specialite]) AS cpte_specialites 
    FROM service 
    WHERE service.[n° specialite]=100 Or service.[n° specialite]=600 Or service.[n° specialite]=700 
    GROUP BY service.[n° clinique] 
    HAVING Count(service.[n° specialite])=3;
    D'où le résultat attendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    n° clinique   cpte_specialites
       30                    3
       50                    3
    Enfin, pour n'afficher que le n° des cliniques retenues par notre requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT service.[n° clinique]
    FROM service 
    WHERE service.[n° specialite]=100 Or service.[n° specialite]=600 Or service.[n° specialite]=700 
    GROUP BY service.[n° clinique] 
    HAVING Count(service.[n° specialite])=3;
    =JBO= (qui a bien envie de se reposer après un tel post )

  18. #18
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    Je ne sais pas ce qui cloche mais cela ne marche pas.

    Au niveau des relations c'est de un vers un ou de un vers plusieurs


    J'ai tout essayé aucun resultat.

    a+

  19. #19
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par emel
    Je ne sais pas ce qui cloche mais cela ne marche pas.

    Au niveau des relations c'est de un vers un ou de un vers plusieurs


    J'ai tout essayé aucun resultat.

    a+
    Quand je fais:
    100 Ou 600 Ou 700

    cela marche cad qu'il m'affiche toous les n° de clinique qui ont la specilaite 100 ou 600 ou 700

  20. #20
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 2
    Points
    2
    Par défaut
    Il me dit d'entreer une valeur de paramètre pour service.specialité

Discussions similaires

  1. [AC-2007] Exporter le résultat d'une requete Acces 2007 vers une cellule sur Excel 2007
    Par wapwinter dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/05/2014, 15h17
  2. [WB11] Table remplie par requete+acces HLitPremier
    Par frlefort dans le forum WebDev
    Réponses: 2
    Dernier message: 09/09/2008, 08h49
  3. Requetes acces lancées depuis Excel avec variables
    Par jackfred dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/06/2007, 15h37
  4. Réponses: 7
    Dernier message: 23/04/2007, 15h35
  5. Requete Acces 97
    Par LhIaScZkTer dans le forum Access
    Réponses: 2
    Dernier message: 08/03/2006, 10h57

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