Bonjour, n'étant pas un grand expert en requête je te propose de le faire en java, voila ma solution.
Franchement au lieu de te prendre la tête à sortir une requête énorme, je ferai ainsi :
Query query= em.createQuery ("Select a.entreprise FROM employé a where a.presence='1' and a.entreprise<>'null' ");
Je ne retourne donc que les entreprises sans les comptages. Ensuite je constitue une Map dont la clé sera mon entreprise et les valeurs les compteurs pour Homme et Femme.
Je crèe une objet RepartitionSexe :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class RepartitionSexe {
private Integer nbFemme;
private Integer nbHomme;
public Integer getNbFemme() {
return nbFemme;
}
public void setNbFemme(Integer nbFemme) {
this.nbFemme = nbFemme;
}
public Integer getNbHomme() {
return nbHomme;
}
public void setNbHomme(Integer nbHomme) {
this.nbHomme = nbHomme;
}
} |
Ensuite :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| HashMap<String, RepartitionSexe> listeRepartition = new HashMap<String, RepartitionSexe>();
/**
* Tu parcours ta liste de resultat entreprise
*/
for (Entreprise entrepriseCourant : listeEntreprise) {
//Pour chaque entreprise remontee
if (listeRepartition.containsKey("entreprise.id")){ //Si l'entreprise est deja dans la map
if ("entrepriseCourant.sexe".equals("F")){
listeRepartition.get("entreprise.id").setNbFemme(listeRepartition.get("entreprise.id").getNbFemme()+1);
}else{
listeRepartition.get("entreprise.id").setNbHomme(listeRepartition.get("entreprise.id").getNbHomme()+1);
}
}else{// Si l'entreprise n'est pas encore dans la map
RepartitionSexe repartition = new RepartitionSexe();
if ("entrepriseCourant.sexe".equals("F")){
repartition.setNbFemme(1);
}else{
repartition.setNbHomme(1);
}
listeRepartition.put("entreprise.id", repartition);
}
}
//Et là tu as ta Map classee par entreprise avec les bons compteurs... |
Si la solution t'interesse, n'hesites pas à me redemander.
Partager