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:
Merci pour votre aide....
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));
Partager