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

Langage SQL Discussion :

Ajouter un total à une requête


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    comptable
    Inscrit en
    Janvier 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Janvier 2015
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Ajouter un total à une requête
    Bonjour,

    je me suis dépatouillé pour modifier une requête dans une base de donnée de bibliothèque.

    J'ai une requête qui fait a peu prêt ce que je veux (tirer le montant des recettes par type)

    cependant, j'aimerais ajouter à cette requête une somme pour chaque type.

    c'est à dire, si cela est possible d'avoir l'ensemble des données triés par type (ce que la requête fais déjà) + une ligne de somme à chaque changement de type.

    Pour le moment le 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
    select b.branchcode,case
    when a.accounttype='Retar' then 'Pénalité de retard'
    when a.accounttype='Abt' then 'Abonnement'
    when a.accounttype='Dette' then 'Dette maximale'
    when a.accounttype='Perdu' then 'Document perdu'
    when a.accounttype='Lreco' then 'Lettre recommandée'
    when a.accounttype='Badge' then 'Perte badge'
    when a.accounttype='w' then 'Perte et profit'
    when a.accounttype='PEB' then  'Prêt Entre Bib (PEB)'
    else 'null'
    end as type
    ,a.timestamp as 'date et heure',b2.surname,b2.firstname,b2.cardnumber
    ,a.note, a.description, substring_index(convert(sum(a.amount),DECIMAL(8,2)),'-',-1) as montant from borrowers b, borrowers b2, accountlines a where b.borrowernumber=a.manager_id  and a.amount like '-%'  and a.note not like '%SANSOBJET%'
    and
    a.accounttype in ('Retar','Abt','Dette','Perdu' ,'Lreco','Badge','PEB')
    and a.date >=<<date sup. égale à |date>> and a.date <=<<date inf. égale à|date>>
    and
    b2.borrowernumber=a.borrowernumber
     
    group by a.timestamp,type,b2.surname,b2.firstname,b2.cardnumber,a.note,a.description

    merci d'avance pour toute aide (précieuse)

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il semble que vous soyez sous MySQL vu que le GROUP BY est incohérent avec le SELECT (il manque le groupage sur b.branchcode) et que votre requête passe quand même.
    Du coup, sauf si vous avez la version 8 béta, pas de CTE possible, pas de fonction OLAP non plus, bref le paléolithique du SQL

    En ce cas passez par une table dérivée pour convertir le montant et totaliser par type
    Et profitez de l'occasion pour décrire les jointures via l'opérateur JOIN, plutôt que de les mélanger avec les critères de filtrage dans le WHERE

    Par contre, en terme de présentation du résultat, la somme par type sera répétée sur chaque ligne détail, faire une ligne différente à rupture sur critères est du ressort de la présentation, pas du SQL

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Regardez du coté de la clause ROLLUP associée au GROUP BY, elle devrait vous permettre de sortir des résultat regroupés, mais je ne sais pas exactement comment MySQL l'implémente.

  4. #4
    Nouveau membre du Club Avatar de toinexplore
    Homme Profil pro
    Etudiant/Passionné SQL-C
    Inscrit en
    Décembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant/Passionné SQL-C
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2017
    Messages : 38
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par escartefigue Voir le message

    bref le paléolithique du SQL

Discussions similaires

  1. ajouter un paramètre à une requête
    Par Cram_N7 dans le forum Struts 2
    Réponses: 1
    Dernier message: 24/08/2009, 12h22
  2. Ajouter message dans une requête
    Par sondo dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/03/2009, 12h19
  3. Réponses: 5
    Dernier message: 18/02/2009, 10h52
  4. Réponses: 1
    Dernier message: 13/02/2009, 11h13
  5. [MySQL] Ajouter un résultat à une requête
    Par MikeV dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/03/2008, 21h51

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