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

InterBase Discussion :

SUM avec firebird / interbase


Sujet :

InterBase

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut SUM avec firebird / interbase
    Bonjour à tous,

    Quand je fais la query ci-dessous, l'application ne me retourne pas le résultat souhaité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Nouveau membre du Club
    Inscrit en
    février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : février 2004
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    Essaie un truc du genre.

    Il faut pouvoir selectionner le mois dans ton select.

    je connais l'UDF extractmonth pour cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select distinct(xnumint), extractmonth(xdate), sum(xnhp) 
    from xpresta 
    where  extractmonth(xdate)=10
    group by xnumint, extractmonth(xdate)
    Je ne te garantis rien, mais ca doit être dans ce genre la.

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    2 043
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 2 043
    Points : 3 328
    Points
    3 328
    Par défaut Re: SUM avec firebird / interbase
    Citation Envoyé par Jeankiki
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select xnumint, sum(xnhp)
    from xpresta
    where extract(month from xdate) = 1
    group by xnumint

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    Merci à vous pour votre solution, ça fonctionne très bien.

    Mais si tu veux grouper uniquement par xnumint et que tu fais ta query sans mettre de min et de max sur xdate, il te renvoi le message d'erreur suivant.
    Erreur:
    Invalid expression in the select list (not conteined in either an aggregate function or the GROUP BY clause).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select xnumint, xdate, sum(xnhp)
    from xpresta
    where xdate >= '2003/01/01'
    and xdate <= '2003/01/31'
    group by xnumint
    Jeankiki

  5. #5
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    2 043
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 2 043
    Points : 3 328
    Points
    3 328
    Par défaut
    Hummm un petit cours de SQL s'impose...

    Ou juste un cours de logique (après tout le SQL n'est que de la logique ensembliste).

    Vous avez un ensemble de données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    XnumInt   Xdate    Xnhp
    1        1/1/2004  10
    2        2/1/2004  20
    2        3/1/2004  30
    1        4/1/2004  40
    1        5/1/2004  50
    Maintenant disont que je veuille regrouper mes lignes pour voir la somme des xnhp pour chacun des xnumint.
    Donc le résultat sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    XnumInt    Xnhp
    1          100
    2          50
    C'est ce que fait la requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select xnumint, sum(xnhp) from matable
    group by xnumint
    Maintenant essayez de me dire ce que votre requete pourait donner comme résultat ou plutot ce que vous voudriez qu'elle donne comme résultat...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select xnumint, xdate, sum(xnhp) from matable
    group by xnumint
    ??
    je groupe par xnumint, a chaque xnumint identique je somme les xnhp et que faire des xdates ??? Vu que je ne demande pas la plus petite ni la plus grande des xdate, comment voulez vous que le moteur SQL trouve un résultat ? Comment devrait t'il choissir une date parmis l'ensemble des dates ?
    Pour xnumint = 1 je somme les xnhp = (10+40+50) et pour le xdate laquel afficher ? il y en a 3 de différentes ??? Bref vous comprenez bien qu'on ne peux pas mettre xdate seul comme ca si on ne regroupe que par xnumint. Donc soit on ne la met pas soit on dit au moteur SQL de prendre la plus petite xdate ou la plus grande xdate trouvé pour un xnumint donné.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    ok, merci pour l'explication Bardibulle, c'est un peut plus clair maintenant.
    Pourrais-tu m'aider pour le problème que j'ai à cette endroit.

    http://www.developpez.net/forums/vie...932&highlight=

    Je me doute que je ne peux sans doute pas te le demander à partir de se sujet, mais se serait bien sympa de ta part.

    Merci d'avance

    Jeankiki

Discussions similaires

  1. Composant Interbase avec firebird 2.0
    Par BXDSPORT dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/01/2007, 10h45
  2. Problème avec le driver ODBC IBPhoenix Firebird/Interbase
    Par lio33 dans le forum Connexion aux bases de données
    Réponses: 5
    Dernier message: 27/02/2006, 09h59
  3. Installation et perte d'icône avec Firebird
    Par SebCBien dans le forum Applications et environnements graphiques
    Réponses: 22
    Dernier message: 31/10/2004, 16h46
  4. Display avec firebird
    Par santo dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 22/10/2004, 14h02
  5. sum avec des nombres avec virgule
    Par Bruno2000 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/09/2004, 15h01

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