Comment creer une requette [Résolu]

Messages postés
12
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
7 février 2014
- - Dernière réponse : CecilCordheley
Messages postés
38
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
15 décembre 2018
- 25 janv. 2014 à 08:48
Bonjour
je travaille actuellement sur access 2003.
j'ai créé une table contenant les champs suivants: Nom et Prénom ,Spécialité,Sexe.
je désir créer une requette qui me donne le total des inscrits dans les spécialités dont le nombre de fille ce qui me donnera par example :

Spécialité: Total Dont filles
Informatique 20 10
Anglais 14 0
.............etc
je vous serais trés reconnaissant si vous pourrez m'aider
car avec cette requette j'aurais mon effectif a jour a bientôt !
Afficher la suite 

3 réponses

Messages postés
38
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
15 décembre 2018
0
Merci
Je pense que tu peux te diriger vers les procédures stockées.

Tu peux faire

SELECT COUNT(*),specialite FROM table GROUP BY specialite
-------
D'après mes recherches, pour afficher le résultat d'un agrega comme "dont nombre de filles", il faut utiliser une clause CASE
--
aksaid2000
Messages postés
12
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
7 février 2014
-
merci thunderhunter je vais essayer votre methode et vous informer du resultat.
aksaid2000
Messages postés
12
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
7 février 2014
-
je vous remercie pour votre message. en fait j'ai essayé de remplacer :
where T1.Specialite = Table1.Specialite
par:LEFT OUTER JOIN Table1.Specialite ON Table1.Specialite=T.Specialite
et ca n'a pas marché ya t'il une erreur dans la saisie et je voudrais apprendre votre methode si c'est possible. et merci d'avance.
CecilCordheley
Messages postés
38
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
15 décembre 2018
-
Oui Il manque le 1
LEFT OUTER JOIN Table1.Specialite ON Table1.Specialite=T1.Specialite 

autant pour moi
Bon conrage !
Commenter la réponse de CecilCordheley
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
26
0
Merci
Bonjour

tu peux aussi imbriquer une requête avec jointure , c'est pas terrible en terme de perf mais si la table n'est pas trop volumineuse ...

ex:
SELECT Table1.Specialite, 
 (select count(*) from table1 as T1 where T1.Specialite = Table1.Specialite ) AS CompteTotal, 
 Count(Table1.Sexe) AS CompteDeFille
FROM Table1
GROUP BY Table1.Specialite,Table1.Sexe
HAVING (Table1.Sexe="f");

aksaid2000
Messages postés
12
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
7 février 2014
-
je vous remercie cs_Robert33 énormément ça a très bien marché et c'est exactement le résultat que je cherchais ,vous m'avez réglé un grand problème et c'est très gentil.
a bientôt!
aksaid2000
Messages postés
12
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
7 février 2014
-
Il reste que les spécialités dont les filles ne sont pas inscrites ne s'affichent pas et je voudrais avoir par exemple un résultat du genre:

Mécanique Total Général 10 Dont filles 0
CecilCordheley
Messages postés
38
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
15 décembre 2018
-
Par ce que vous faite une equijointure en requête imbrique
 where T1.Specialite = Table1.Specialite

Si vous remplacez cela par
LEFT OUTER JOIN Table1.Specialite ON Table1.Specialite=T.Specialite

OU
RIGHT OUTER JOIN Table1.Specialite ON Table1.Specialite=T.Specialite

Alors la requête devrait inclure tout les résultat y compris 0
Commenter la réponse de cs_Robert33
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
26
0
Merci
Re ...

Pour avoir les spécialités sans inscription il faut changer le sens de la requête et mettre la clause WHERE sexe="F" dans l'imbrication
SELECT Table1.Specialite, 
(select count(*) from table1 as T1 where T1.Specialite = Table1.Specialite AND  T1.sexe="F") AS CompteDeFille, 
Count(Table1.Sexe) AS CompteTotal
FROM Table1
GROUP BY Table1.Specialite;
aksaid2000
Messages postés
12
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
7 février 2014
-
je vous remercie pour votre aide precieuse.ca a trés bien marché et vous m'avez réglé un grand probleme dans mon travail ou l'effectif des inscrit est souvent soumis a des modifications. sachant que je suis novice en SQL ;connaissez vous un site ou je pourrais m'initier ?
Merci encore et a bientot !
Commenter la réponse de cs_Robert33