Bonjour,

J'aimerai générer la requête suivante en OJB et obtenir le résultat suivant.

Tout d'abord voila la table de départ:

annee | mois | code | Utilisateur | nombre1 | nombre2
-----------------------------------------------
2008 | 1 | 1 | ut1 | 5 | 10
2008 | 2 | 1 | ut1 | 3 | 5
2007 | 12 | 1 | ut1 | 1 | 8
2008 | 2 | 1 | ut2 | 35 | 7
2007 | 12 | 1 | ut2 | 8 | 4
2007 | 11 | 1 | ut1 | 7 | 8

voilà le résultat que j'attends:

code | Utilisateur | SUM(nombre1) | SUM(nombre2)
----------------------------------------------------
1 | ut1 | 4 (3+1) | 13 (5+8)

qui se materialise par la requete suivante

select code, utilisateur, SUM(nombre1) , SUM(nombre2) from table where code='1' and utilisateur='1' and (annee > 2007 or (annee = 2007 and mois >= 12 ) and (annee < 2008 or (annee = 2008 and mois <= 1 ) group by code,utilisateur order by code,utilisateur

Pour le moment j'arrive à générer la requête suivante:

select code, utilisateur, nombre1 , nombre2 from table where code='1' and utilisateur='1' and (annee > 2007 or (annee = 2007 and mois >= 12 ) and (annee < 2008 or (annee = 2008 and mois <= 1 ) order by code,utilisateur

Il me manque, SUM et GROUP BY.

Mon code est le suivant:

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
25
26
27
28
29
        Criteria criteria = new Criteria();
 
 
        if (null != critere.getDateMin()) {
            Calendar calendarMin = new GregorianCalendar();
            calendarMin.setTime(critere.getDateMin());
            criteria.addSql((" (A0.SCO_ANNEE > " + calendarMin.get(Calendar.YEAR)) + " OR ( A0.SCO_ANNEE = " + calendarMin.get(Calendar.YEAR)
                    + " AND A0.SCO_MOIS >= " + (calendarMin.get(Calendar.MONTH) + 1) + " )) ");
        }
        if (null != critere.getDateMax()) {
            Calendar calendarMax = new GregorianCalendar();
            calendarMax.setTime(critere.getDateMax());
            criteria.addSql((" (A0.SCO_ANNEE < " + calendarMax.get(Calendar.YEAR)) + " OR ( A0.SCO_ANNEE = " + calendarMax.get(Calendar.YEAR)
                    + " AND A0.SCO_MOIS <= " + (calendarMax.get(Calendar.MONTH) + 1) + " )) ");
        }
        if (null != critere.getCode() && critere.getCode().length() != 0) {
                   criteria.addEqualTo("code",  critere.getCodeSite());
        }
        if (null != critere.getUtilisateur() && critere.getUtilisateur().length() != 0) {
                 criteria.addEqualTo("Utilisateur", critere.getUtilisateur());
        }
 
        QueryByCriteria queryByCriteria = new QueryByCriteria(StatistiquesCommande.class, criteria);
 
        queryByCriteria.addOrderByAscending("code");
        queryByCriteria.addOrderByAscending("Utilisateur");
 
 
        return ((Collection) broker.getCollectionByQuery(queryByCriteria));
Merci pour votre aide....