Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2011, 21h43   #1
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2011
Messages : 83
Points : 22
Points : 22
Par défaut Calcul taux via SQL ?

Bonsoir,

J'ai une table avec un champs qui recense des modèles de machines qui sont tombées en panne.(champs Texte)

Je souhaiterais faire une requête où état afin de calculer le taux de pannes par modèles de machines.
Si je ne me trompe pas, je pense qu'il faut (diviser le nombre d'enregistrements du modèle concerné par le nombre total d'enregistrements *100)
Puis le répéter pour tous les modèles ??

Seulement je ne sais pas comment réaliser cette opération by SQL ?

D'avance merci pour votre aide.
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 22h00   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
bonsoir,

Citation:
Envoyé par fragglerick Voir le message
J'ai une table avec un champs qui recense des modèles de machines qui sont tombées en panne.(champs Texte)
tu pourrais détailler la structure de cette table (description des champs) et donner un exemple du contenu ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 22h13   #3
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2011
Messages : 83
Points : 22
Points : 22
Bonsoir,

La table rassemble les éléments d'interventions de techniciens. Je recense les champs tels que: Nom_Tech / Date_intervention / H_début_intervention / H_fin_intervention / ville / Modèle_machine / Organe_HS etc...
Le champ pour lequel je souhaiterais calculer le taux d'intervention par Modèle_machine, est de type texte. le contenu ressemble à ceci : Peugeot / Renault / Citroën / ect..

Merci
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 23h18   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
Code :
1
2
3
4
NomTech 	DateIntervention	…	Modele_Machine	…
Robert		01/03/2011		…	"Peugeot/Renault"
Paul		03/03/2011		…	"Renault/Citroën/Peugeot"
Bibi		05/03/2011		…	"Peugeot"
Ce qui donnerait:

Peugeot: 3 interventions sur 3=100%
Renault : 2 interventions sur 3=67%
Citroën : 1 intervention sur 3=33%

J’ai bien compris ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 23h45   #5
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2011
Messages : 83
Points : 22
Points : 22
Citation:
Envoyé par f-leb Voir le message
J’ai bien compris ?
Pas tout à fait... J'ai rectifié
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 10h26   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Fragglerick et Fabien,

Juste une astuce que j'ai découverte récemment.

Requête R1
- ajoutes TaTable (SELECT) ;
- passes en mode regroupement par ∑ (GROUP BY) ;
- sélectionnes Count(*) (SELECT).
==> une seule ligne comportant le total général.

Requête R2
- ajoutes TaTable (SELECT) ;
- passes en mode regroupement par ∑ (GROUP BY) ;
- sélectionnes Marque, Count(*) (SELECT).
==> une ligne par marque avec son total.

Requête R3
- ajoutes R2 (SELECT) ;
- ajoutes R1 (SELECT) ;
=> SANS LIEN ENTRES ELLES (pas de JOIN) : c'est ça, l'astuce...
- sélectionnes R2.Marque, (R2.Count(*)/R1.Count(*))*100.
==> une ligne par marque avec le total de la marque, le total toutes marques et le %.

Pas testé...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 15h35   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
bonjour,

Citation:
Citroën : 0 intervention sur 3=0%
Pour que "Citroën" apparaisse dans le résultat alors qu'il n'y a aucune intervention sur ce modèle, il faut une table où sont stockés tous les modèles:

Modele(idModele, Modele_Machine, ...)

avec le schéma: Intervention-∞---------1-Modele

Avec la requête:

Code sql :
1
2
3
4
5
6
7
8
 
SELECT 
Modele.idModele, 
Modele.Modele_machine, 
Count(Intervention.idIntervention) AS NbInterventionModele
   FROM Modele LEFT JOIN Intervention 
           ON Modele.idModele = Intervention.idModele
   GROUP BY Modele.idModele, Modele.Modele_machine;
on obtient le nombre d'interventions par modele.

Avec la requête:
Code sql :
SELECT Count(*) AS NbrTotalIntervention FROM Intervention ;
On obtient le nombre total d'interventions

Pour obtenir le taux, on fait la division: NbInterventionModele/NbrTotalIntervention

Ce qui donne la requête finale:

Code sql :
1
2
3
4
5
6
7
SELECT 
Modele.idModele, 
Modele.Modele_machine, 
Count(Intervention.idIntervention)/(SELECT count(*) FROM Intervention) AS TauxIntervention
  FROM Modele LEFT JOIN Intervention 
     ON Modele.idModele = Intervention.idModele
  GROUP BY Modele.idModele, Modele.Modele_machine;
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 00h07   #8
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2011
Messages : 83
Points : 22
Points : 22
Bonsoir et merci à tous les deux de vous pencher sur mon pb

Je suis neuf en Access et autant vous dire que je rame pas mal .. je progresse à mon rythme

Dans un premier temps, j'essaie d'appliquer la méthode à Richard;

=> J'ai créer un champ supplémentaire dans ma table pour pouvoir calculer plus simplement tous les enregistrements.

La requête R1 fonctionne bien ==> une seule ligne comportant le total général nombre total d'enregistrement, OK j'y suis arrivé !

La requête R2 fonctionne bien ==> J'ai bien une ligne par marque avec le total de pannes s'y afférent, OK j'y suis arrivé !

En revanche, je ne vois pas comment procéder pour R3 ?

Dois-je créer un champ supplémentaire de calcul ?
Je ne vois pas exactement comment s'articule la formule de calcul dans R3 ?

Quand j'aurais réussi, je passerai à la méthode de Fabien

Merci à vous les gars.
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 12h21   #9
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Fragglerick,

Citation:
Envoyé par Fragglerick
Dois-je créer un champ supplémentaire de calcul ?
==> Oui.

Dans R1, renommes "TotalGeneral" le champ Count(*) qui doit être Expr1.
Dans R2, renommes "TotalMarque" le champ Count(*) qui doit être Expr1.
Dans R3, sélectionnes les champs "Marque", "TotalMarque", "TotalGeneral" et saisis % : (TotalMarque/TotalGeneral)*100.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 18h49   #10
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2011
Messages : 83
Points : 22
Points : 22
Bonjour,

Non seulement ça fonctionne mais en plus j'ai tout saisie !!

Merci infiniment à tous les deux !!!
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 08h10   #11
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2011
Messages : 83
Points : 22
Points : 22
Bonjour à tous ,

Ma direction à été agréablement surprise lorsque je lui ai présenté mes statistiques toutes fraiches, mais...Et oui parce qu'il y a un mais , elle m'a demandé de les ramener au mois ...Pourquoi n'y ai je pas pensé !!
Plutôt fier de moi malgré tout , me voilà repartie avec ma clé USB sous le bras avec l'objectif de filtrer en quelques clicks mes stats par mois !!

" -Je vous corrige ça et je reviens dans quelques minutes ..."
2 jours sont passés, ils m'attendent encore

Voilà ce que j'ai tenté de faire, en vain, selon le "modèle" de Richard:

Requête R1
- Date_inter => en critère (Date entre jj/mm/aa et jj/mm/aa)
- Date_inter Count(*)
- Marque
==> autant de lignes que de dates ou chaque dates = le total d'interventions par marques.

Requête R2
* ajoutes R1
- Total_inter somme(*)
- Marque
==> Une ligne par Marque avec le Total

Requête R3
* ajoutes R1
- TotalEnregistrement dans la période sélectionnée
==> Donne le total des enregistrements(jours) dans la requête R1 (jours sélectionnés)

Requête R4

* ajoutes R2 et R3
-TotalEnregistrement
-Total_inter
- Marque
- (TotalEnregistrement/Total_inter)/100

Bien entendu le résultat est faut !!
Je ne suis pas certain que ma façon d'opérer soit des plus académiques, selon vous pour quelles raisons ?
Mon manque d'expérience ne me permets pas d'avoir une vision "plus large" sur les possibilités offertes à la réalisation de ce "filtre".

D'avance merci
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 10h10   #12
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Fragglerick,

Pas certain que ce soit cela que te demande ta direction...

Peux-tu donner un exemple du résultat final que tu veux obtenir (la liste des colonnes, comme si tu voulais générer un fichier Excel) ?

Je me doute, un peu, de ce qu'il faut (je peux me tromper), mais c'est toi qui doit faire cette démarche.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 13h38   #13
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2011
Messages : 83
Points : 22
Points : 22
Bonjour Richard.

Tu as raison, ce que me demande ma direction c'est plutôt le taux de pannes par mois et par machines.
Vaste programme pour moi qui ne travaille sur ACCESS que depuis 2 mois ... Ainsi, je me dis que si j'arrive à calculer le taux de pannes sur une période donnée (1 mois) via une requête, je n'aurais qu'a multiplier les requêtes pour tous les mois de l'année et enfin les cumuler sur un état.
Visiblement je m'y prends mal
Je vous joint un modèle de tableau au format (.xls) que je souhaiterais réaliser sous forme d'état.

Merci à vous
Fichiers attachés
Type de fichier : rar Stats taux pannes.rar (7,3 Ko, 9 affichages)
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 14h41   #14
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Suggestion :

Requête R1
- ajoutes TaTable (SELECT) ;
- passes en mode regroupement par ∑ (GROUP BY) ;
- sélectionnes Année(TaDate)&Mois(TaDate), Count(*) (SELECT).
==> 1 ligne par AnnéeMois avec le total correspondant.

Requête R2
- ajoutes TaTable (SELECT) ;
- passes en mode regroupement par ∑ (GROUP BY) ;
- sélectionnes Année(TaDate)&Mois(TaDate), Marque, Count(*) (SELECT).
==> une ligne par AnnéeMois et par marque avec le total correspondant.

Requête R3
- ajoutes R2 (SELECT) ;
- ajoutes R1 (SELECT) ;
- lies R2 à R1, via AnnéeMois avec flèche à droite (LEFT JOIN) ;
- sélectionnes R2.Marque, R2.Count(*), R1.Count(*), (R2.Count(*)/R1.Count(*))*100.
==> une ligne par AnnéeMois et par marque avec le total correspondant, le total par ANnéeMois, toutes marques et le %.

Pas testé...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h18   #15
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2011
Messages : 83
Points : 22
Points : 22
Bonjour Richard,

Une fois de plus Tout semble fonctionner correctement
Très honnêtement je n'aurais pu m'en sortir sans ton aide

Encore une question: Existe t-il une astuce pour rendre la date au format std => mm/yyyy ? En l'état actuel, la date qui sous la forme "yyyym" ne me permet pas de trier comme je le souhaiterais...

Merci merci ..!
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 10h48   #16
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Fragglerick,

Je ne connais pas VBA, et assez mal les fonctions associées, notamment celles concernant les dates.

Jettes un coup d'oeil dans l'aide Access qui est très bien conçue, dans les tutoriaux de ce forum, qui l'est non moins, dans la FAQ et dans ce forum : il y a beaucoup de discussions sur ce sujet.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 17h44   #17
Membre à l'essai
 
Homme Steph
Technicien maintenance
Inscription : janvier 2011
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Steph
Âge : 40
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2011
Messages : 83
Points : 22
Points : 22
Bonjour Richard,

Je vais voir si je trouve une piste du côté du forum VBA.

Je mets ce thread en résolu mais je n'ai pas encore présenté les stats que m'a demandé ma direction... D'ici que ça change encore ...
Je garde "ta carte de visite" sous le coude

Merci infiniment Richard !
fragglerick est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h02.


 
 
 
 
Partenaires

Hébergement Web