SUM avec firebird / interbase
Bonjour à tous,
Quand je fais la query ci-dessous, l'application ne me retourne pas le résultat souhaité.
Code:
1 2 3 4 5 6
|
select distinct(xnumint), xdate, sum(xnhp)
from xpresta
where xdate >= '2003/01/01'
and xdate <= '2003/01/31'
group by xnumint, xdate, xnhp |
Voici le résultat que je reçois
Code:
1 2 3 4 5 6 7
|
XNUMINT XDATE XNHP
---------------------------------
1 13/01/2003 39
1 15/01/2003 39
1 21/01/2003 39
1 28/01/2003 39 |
En fait la valeur dans la colonne xnhp correspond à un nombre d'heure, et j'aimerai pouvoir faire le total des heures sur 1 mois.
Donc il me faudrait comme résultat 156 dans XNHP pour XNUMINT = 1
Quelqu'un pourrait-il me donner la query adéquate pour cette opération
Merci d'avance pour votre aide
Jeankiki
Re: SUM avec firebird / interbase
Citation:
Envoyé par Jeankiki
Code:
1 2 3 4 5 6
|
select distinct(xnumint), xdate, sum(xnhp)
from xpresta
where xdate >= '2003/01/01'
and xdate <= '2003/01/31'
group by xnumint, xdate, xnhp |
C'est tout a fait normal, vous groupez par xnumint, xdate et xnhp.
Donc à chaque date différente il fa faire une ligne et même pire, à chaque xnhp différent il va faire une ligne...
Comme vous l'a expliqué iguanevif, il faut que vous changiez votre regroupement.
Donc par exemple :
Code:
1 2 3 4 5 6
|
select xnumint, min(xdate), max(xdate), sum(xnhp)
from xpresta
where xdate >= '2003/01/01'
and xdate <= '2003/01/31'
group by xnumint |
En résultat vous aurez une ligne par xnumint de distinct.
La première colonne correspond à xnumint, la seconde à la plus petite date trouvé, la triosième colonne à la plus grande date trouvée et la dernire colonne à la somme des xnhp pour ce xnumint.
Mais vous pouvez également changer votre test comme vous le suggère iguanevif (sans devoir utiliser une UDF c'est possible) :
Code:
1 2 3 4 5
|
select xnumint, sum(xnhp)
from xpresta
where extract(month from xdate) = 1
group by xnumint |