OVH Cloud OVH Cloud

Requete complexe

7 réponses
Avatar
eric
J'ai une table Capacit=E9 avec les colonnes : code_lycee, nom_lycee,
code_formation, lib_formation et capacite.
Ma 2=B0 table effectif comporte les col : code_lycee, nom_lycee,
code_formation, lib_formation et effectif.
Certains lyc=E9es de la 1re table ne se trouvent pas dans la 2=B0 et
inversement.
Voici ma requete :
SELECT Tab_Capacite.codeForm, Tab_Capacite.lib_form,
Sum(Tab_Eff.Effectif), Sum(Tab_Capacite.capa)
FROM Tab_Capacite LEFT JOIN Tab_Eff ON Tab_Capacite.codeForm =3D
Tab_Eff.codeForm
GROUP BY Tab_Capacite.codeForm, Tab_Capacite.lib_form
HAVING Sum(Tab_Capacite.capa)<>0
La colonne capacit=E9 est bonne, mais pour la colonne effectif, la
requete me calcule tous les effectifs de la table effectif y compris
ceux des lyc=E9es pour lesquels la capacit=E9 est 0 dans la table
capacit=E9
Une solution ?
Merci d'avance
Eric

7 réponses

Avatar
LiR
Bonjour,

En fait, au lieu de nous dire ce que fait la requête, il vaudrait mieux que
tu nous dises ce que tu veux obtenir.

Par exemple, cherches-tu à comptabiliser uniquement les effectifs qui
rentrent dans leur capacité respective (pour un lycée donné si la capacité
est 10 et l'effectif 12, cela renvoie 10)?



J'ai une table Capacité avec les colonnes : code_lycee, nom_lycee,
code_formation, lib_formation et capacite.
Ma 2° table effectif comporte les col : code_lycee, nom_lycee,
code_formation, lib_formation et effectif.
Certains lycées de la 1re table ne se trouvent pas dans la 2° et
inversement.
Voici ma requete :
SELECT Tab_Capacite.codeForm, Tab_Capacite.lib_form,
Sum(Tab_Eff.Effectif), Sum(Tab_Capacite.capa)
FROM Tab_Capacite LEFT JOIN Tab_Eff ON Tab_Capacite.codeForm > Tab_Eff.codeForm
GROUP BY Tab_Capacite.codeForm, Tab_Capacite.lib_form
HAVING Sum(Tab_Capacite.capa)<>0
La colonne capacité est bonne, mais pour la colonne effectif, la
requete me calcule tous les effectifs de la table effectif y compris
ceux des lycées pour lesquels la capacité est 0 dans la table
capacité
Une solution ?
Merci d'avance
Eric




Avatar
sinpa
Je veux faire la somme des effectifs par formation, mais uniquement pour les
lycées dont la capacité est différente de 0
Ma requete telle qu'elle est me fait la somme de tous les effectifs, elle
prend aussi en compte les effectifs de la table effectifs où la capacité
est = 0 dans la table Capacité.

"LiR" a écrit dans le message de news:

Bonjour,

En fait, au lieu de nous dire ce que fait la requête, il vaudrait mieux
que
tu nous dises ce que tu veux obtenir.

Par exemple, cherches-tu à comptabiliser uniquement les effectifs qui
rentrent dans leur capacité respective (pour un lycée donné si la capacité
est 10 et l'effectif 12, cela renvoie 10)?


Avatar
LiR
Alors c'est une clause WHERE qu'il te faut et non une clause HAVING :

SELECT Tab_Capacite.codeForm, Tab_Capacite.lib_form,
Sum(Tab_Eff.Effectif), Sum(Tab_Capacite.capa)
FROM Tab_Capacite LEFT JOIN Tab_Eff ON Tab_Capacite.codeForm Tab_Eff.codeForm
WHERE Tab_Capacite.capa<>0
GROUP BY Tab_Capacite.codeForm, Tab_Capacite.lib_form



Je veux faire la somme des effectifs par formation, mais uniquement pour les
lycées dont la capacité est différente de 0
Ma requete telle qu'elle est me fait la somme de tous les effectifs, elle
prend aussi en compte les effectifs de la table effectifs où la capacité
est = 0 dans la table Capacité.

"LiR" a écrit dans le message de news:

Bonjour,

En fait, au lieu de nous dire ce que fait la requête, il vaudrait mieux
que
tu nous dises ce que tu veux obtenir.

Par exemple, cherches-tu à comptabiliser uniquement les effectifs qui
rentrent dans leur capacité respective (pour un lycée donné si la capacité
est 10 et l'effectif 12, cela renvoie 10)?







Avatar
sinpa
OK, je testerais ça lundi au bureau
Merci
"LiR" a écrit dans le message de news:

Alors c'est une clause WHERE qu'il te faut et non une clause HAVING :

SELECT Tab_Capacite.codeForm, Tab_Capacite.lib_form,
Sum(Tab_Eff.Effectif), Sum(Tab_Capacite.capa)
FROM Tab_Capacite LEFT JOIN Tab_Eff ON Tab_Capacite.codeForm > Tab_Eff.codeForm
WHERE Tab_Capacite.capa<>0
GROUP BY Tab_Capacite.codeForm, Tab_Capacite.lib_form



Je veux faire la somme des effectifs par formation, mais uniquement pour
les
lycées dont la capacité est différente de 0
Ma requete telle qu'elle est me fait la somme de tous les effectifs, elle
prend aussi en compte les effectifs de la table effectifs où la capacité
est = 0 dans la table Capacité.




Avatar
eric
Message : Impossible d'avoir une fonction d'agrégat dans la clause
WHERE Sum(Tab_Capacite.capa)<>0
T'as oublié que j'avais une somme...
Avatar
LiR
La clause WHERE que j'ai indiquée n'est pas :

WHERE Sum(Tab_Capacite.capa)<>0

Mais :

WHERE Tab_Capacite.capa<>0

C'est bien la différence entre les clauses WHERE et HAVING


Message : Impossible d'avoir une fonction d'agrégat dans la clause
WHERE Sum(Tab_Capacite.capa)<>0
T'as oublié que j'avais une somme...




Avatar
eric
exact. Merci