pio_killer
Messages postés62Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention15 avril 2016
-
4 juin 2009 à 08:44
pio_killer
Messages postés62Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention15 avril 2016
-
29 juin 2009 à 08:52
Bonjour,
j'ai un petit problème sur lequel je penche depuis un moment.
j'ai une table Synthèse dans laquelle je retrouve un champ ValeurA,ValeurB et ValeurC
pour chaque ValeurA, il peut y avoir plusieur ValeurB
et pour chaque ValeurB, il peut y avoir plusieurs ValeurC
Cela fait une liste conséquent (600000 ligne par exemple)
Je voudrais extraire pour certaine valeur de ValeurA et ValeurB le pourcentage de ValeurC
Je suis arrivé à le faire mais cela calcule trop longtemps (j'ai fait le calcul pour 2 ValeurA et pour 235 ValeurB)
Voici la procédure que j'ai utilisé (en VBA):
J'ai mis la liste de ValeurA dans une table Avancement
par une requete Select, je parcourts cette table et pour chaque valeur de ValeurA et de ValeurB, j'extrait le nombre de ValeurC dans la table Synthèse
ensuite, avec une requete update, je met cette valeur dans le champ correspondant à la ValeurA et ValeurB de la table Avancement
Vu que cela calcule longtemps, je me damndé s'il n'y avait pas une requete qui ferait ce calcul directement donc plus rapidement
J'espère que j'ai été assez clair dans mes explications
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 4 juin 2009 à 10:09
Salut
Pas clair.
Ce pourcentage doit-il être calculé pour chacune des lignes de données ou bien dois-tu calculer ce pourcentage en prenant l'ensemble des données ?
Si c'est ligne par ligne, oui, dans ta requète de lecture, tu peux ajouter un champ calculé, exemple :
Select ValeurA, ValeurB, Val(ValeurA * ValeurB) As monCalcul
Le "As" n'est là que pour donner un nom à la colonne ainsi générée.
A toi de voir quelle formule utiliser dans le calcul pour faire ce que tu veux
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
pio_killer
Messages postés62Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention15 avril 201613 5 juin 2009 à 08:49
C'est encore moi.
T'a requete marche bien en mode "selection"
mais je voudrait que les pourcentage calculés soient rajoutés dans la table Avancement.
Donc, j'ai essayé avec une requete update mais cela me met le message "L'opération doit utiliser une requête qui peut être mise à jour"
J'ai fait des recherche et j'ai trouvé plein de sujet parlant de ce pb mais je n'arrive pas à l'adapter à mon fonctionnement
Voici la 1ère requête qui me calcule le pourcentage:
SELECT avancement.nom, avancement.nmbre1, Count(synthèse.nmbre2) AS CompteDenmbre2, ([CompteDenmbre2]/[nmbre1])*100 AS CalculPourcentage
FROM avancement INNER JOIN synthèse ON avancement.nom = synthèse.nom
GROUP BY avancement.nom, avancement.nmbre1
HAVING (((avancement.nom) Is Not Null));
Voici la 2ème requête qui devrait me faire l'update:
UPDATE avancement, R_Avancement SET avancement.nmbre2 = [R_Avancement]!CalculPourcentage
WHERE (((avancement.nom) Is Not Null));
Pour plus de compréhension, j'ai changé "ValeurA en "nom", et "ValeurC en "nmbre2"
nmbre1 est le nombre total qui sert à caqlculer le pourcentage.
Voici un exemple:
dans la table avancement, il y a:
nom=tim
nmbre1=16
dans la table synthèse , il y a:
nom=tom
nmbre2=4
La 1ère requête me donne le résultat suivant:
nom=tim
nmbre1=16
CompteDenmbre2=4
CalculPourcentage=25
Je voudrait donc une requête qui me mette 25 dans la table "avancement" pour le nom "tim"
pio_killer
Messages postés62Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention15 avril 201613 29 juin 2009 à 08:52
Bon, j'ai trouvé.
En fait je pensais pouvoir faire une requête qui ferait tout mais non.
je recapitule le principe:
j'ai une table Synthèse dans laquelle je retrouve un champ ValeurA,ValeurB et ValeurC
pour chaque ValeurA, il peut y avoir plusieur ValeurB
et pour chaque ValeurB, il peut y avoir plusieurs ValeurC
Exemple (utilisation de voiture de société):
Valeur A ; Valeur B ; Valeur C
Voiture1 Pierre 01/02/2005
Voiture2 Pierre 15/02/2005
Voiture1 Paul 02/02/2005
Voiture1 Jacques 03/02/2005
Voiture2 Paul 01/05/2005
Voiture1 Jacques 15/10/2005
Voiture2 Pierre 25/09/2005
Voiture2 Jacques 10/07/2005
j'ai fait 4 requêtes:
une qui liste combien de fois chaque emplyé a utilisé chaque voiture
une qui fait le pourcentage de ce résultat
une qui charge ce résultat dans une table intermédiaire
une qui met à jour la table finale en fonction de la table intermédiaire