IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Résultat d'une requête JPQL


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut Résultat d'une requête JPQL
    Bonjour,
    j'ai fait une requête jpql pour avoir la répartition des hommes/femmes dans une entreprise

    la requête est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      public List<String> Répartition(){
     
    Query query;
     
    query= em.createQuery ("Select a.entreprise,"
     
                        +"COUNT( CASE WHEN a.sexe='F' THEN a.sexe ELSE'0' end)," 
                        +"COUNT( CASE WHEN a.sexe='M' THEN a.sexe ELSE'0' end)" 
                        +"FROM employé a where a.presence='1' and a.entreprise<>'null' group by a.enreprise ORDER BY a.entreprise");
     
     
    return query.getResultList();}
    mais le problème que j'ai rencontré est lors de l'exécution de la requete,j'obtiens le résultat suivant:
    entreprise femmes hommes

    entreprise1 120 120
    entreprise2 220 220
    entreprise3 400 400
    entreprise4 600 600
    explication du résultat:

    la requete me donne la somme:hommes+femmes et me l'affiche dan hommes /femmes

    c'est à dire au lieu d'avoir:
    entreprise femmes hommes

    entreprise1 50 70
    entreprise2 120 100
    entreprise3 150 250
    entreprise4 300 300

    j'ai essayé avec SUM au lieu de count,j'ai obtenu le résulta suivant
    entreprise femmes hommes

    entreprise1 50 50
    entreprise2 120 120
    entreprise3 150 150
    entreprise4 300 300
    si quelqu'un a une réponse, qu'il m'aide

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut résultat d'une requete jpql
    for (Entreprise entrepriseCourant : listeEntreprise) /pour avoir listeEntreprise

    est ce que j'aurais le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public List<String> listeEntreprise(){
     
    Query query;
     
     
    Query query= em.createQuery ("Select a.entreprise FROM employé a where a.presence='1' and a.entreprise<>'null' ");
     
    return query.getResultList();}
    et puis esrt ce que ce code je le met dans un controlleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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);
    			}
    		}
    merci beaucoup pour votre réponse, je vais adopté votre solution

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Bonjour,
    Désolé pour ma réponse tardive.Dis peux tu utiliser le bouton "#" pour séparer tes commentaires postés du code? on a du mal à te lire correctement. Oui le bout de code peut être utilisé dans une méthode de ton contrôleur.N'hesite pas si tu bloques

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Et la réponse est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    query= em.createQuery ("Select a.entreprise,"
    
    +"COUNT( CASE WHEN a.sexe='F' THEN a.sexe ELSE NULL  end),"
    +"COUNT( CASE WHEN a.sexe='M' THEN a.sexe ELSE NULL  end)"
    +"FROM employé a where a.presence='1' and a.entreprise IS NOT NULL group by a.enreprise ORDER BY a.entreprise");
    Autre version avec SUM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    query= em.createQuery ("Select a.entreprise,"
    
    +"SUM( CASE WHEN a.sexe='F' THEN 1 ELSE 0 end),"
    +"SUM( CASE WHEN a.sexe='M' THEN 1 ELSE 0 end)"
    +"FROM employé a where a.presence='1' and a.entreprise IS NOT NULL  group by a.enreprise ORDER BY a.entreprise");
    il y avait aussi une erreur avec entreprise <> 'null'
    on doit écrire IS NOT NULL
    (sinon il cherche une entreprise qui ne s'appelle pas "null" )
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut résultat d'une requete jpql
    Bonjour

    merci pour ta réponse Népomucène,j'ai déja essayé avec le deuxième code celui de SUM?mais dans mon datatable j'obtiens toujours le meme résultat homme/femme est ce que vous avez une idée sur ça,

    merci encore pour ta réponse

Discussions similaires

  1. Comparer le résultat d'une requête
    Par VirginieGE dans le forum ASP
    Réponses: 3
    Dernier message: 10/08/2004, 15h15
  2. Arrondir le résultat d'une requête
    Par wautierp dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/06/2004, 11h56
  3. Résultat d'une requête dans une variable...
    Par Hoegaarden dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/04/2004, 13h51
  4. Résultat d'une requète SQL
    Par camino dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2004, 15h22
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo