Requête sql

brouki Messages postés 39 Date d'inscription   Statut Membre Dernière intervention   -  
seminoque Messages postés 12 Statut Membre -
Bonjour,

j'ai la table suivant
financement( numéro_projet(cp) , nom_organisme (cp) , monatant )

cette table à deux clés primaires : numéro_projet et nom_organisme .

je veux calculé l'apport de l'organisme 'xxx' au projet dont le numéro est 111 par exemple

numéro_projet nom_organisme monatant
111 XXX 10
111 YYY 50
111 ZZZ 40
222 AAA 30
222 XXX 20
333 ZZZ 10

l'apport de xxx au projet 111 est 10% ( 10/10+50+40)
je voudrai savoir si cette requête marche

select monatant / count(montant) into approt from financement
where (numéro_projet=111) and (nom_organisme = 'xxx' ) ;

merci d'avance.

3 réponses

HostOfSeraphim Messages postés 7340 Statut Contributeur 1 608
 
Pourquoi 10/10+50+40 ? Si numero_projet et nom_organisme sont des clés primaires, tu ne dois avoir qu'une seule ligne par projet et par organisme, donc un seul résultat possible pour le montant concernant XXX et le projet 111.

0
brouki Messages postés 39 Date d'inscription   Statut Membre Dernière intervention  
 
le projet 111 nécessite 100 ( 10+50+40), je veux calculé la contribution de l'organisme xxx à ce projet,

pour ta réponse : oui c'est ça!! j'ai pas doublons 111 xxx !!!

merci
0
seminoque Messages postés 12 Statut Membre
 
Il me semble qu'il faut utiliser la fonction SUM et non COUNT.

Je pense que ta requête ne donne pas le résultat attendu car elle ne sélectionne que la ligne 111 XXX au lieu des trois lignes 111 XXX, 111 YYY et 111 ZZZ.

Pour résoudre le problème, je ferais deux requêtes, une première pour sélectionner la part de chaque organisme au projet 111 et une deuxième pour ne sélectionner que la contribution de XXX. En imbriquant ces deux requêtes, on obtient :

select colonne1, colonne2
from
(
select monatant/sum(monatant) as colonne1, nom_organisme as colonne2
from financement
where numéro_projet=111
group by nom_organisme
)
where colonne2='XXX'
0