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 :

Grouper deux résultats de select


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Grouper deux résultats de select
    bonjour,
    pour savoir où je vais en trésorerie, un tableau php me liste chaque mois ce qui rentre (tab_ventes) et ce qui sort (tab_achats) sur une année (exercice)...le but étant qu'il en reste à la fin du mois

    je patauge depuis un moment pour éviter un l'affichage d'un doublon malgré mes champs groupés. Pour l'instant j'en suis là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT MONTH(date_achat) AS ordre, MONTHNAME(date_achat) AS mois,
           SUM(qte_achat*p_achat) AS aht, SUM(qte_achat*p_achat*tva_achat) AS atva,
           "" AS vht, "" AS vtva
           FROM tab_achats AS a
           WHERE a.prev_achat=-1 AND YEAR(date_achat)='.$exercice.' AND a.lien_plancomptable>599999 AND a.lien_plancomptable<700000
           GROUP BY mois
           UNION
           SELECT MONTH(date_fact) AS ordre, MONTHNAME(date_fact) AS mois,
           "" AS aht, "" AS atva,
           SUM(ht_fact) AS vht, SUM(tva_fact) AS vtva
           FROM tab_factures AS f
           WHERE YEAR(date_fact)='.$exercice.'
           GROUP BY mois
           ORDER BY ordre
    le résultat qui en sort est celui-ci :
    ordre mois      aht  atva vht  vtva
    ----- --------- ---- ---- ---- ----
    1     January   1777  159    0    0
    2     February  1659  296    0    0
    6     June       639   96    0    0
    8     August       0    0  210   41
    8     August     925  181    0    0
    9     September    0    0 1059   87
    ...les résultats sont en millions d'euros, bien sûr

    comment pourrais-je assembler les valeurs du mois d'aout dans une seule et même ligne dès le SQL (sans passer par array_merge ou autre php)?

    une infinie reconnaissance au premier qui m'aide : je patauge depuis un moment, merci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous n'êtes pas très loin du résultat. Il vous reste à modifier vos "" en 0, et appliquer une somme à l'ensemble du résultat de votre requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      SELECT ordre, mois
           , sum(aht) as aht, sum(atva) as atva
           , sum(vht) as vht, sum(vtva) as vtva
        FROM (<votre requête union>)
    GROUP BY ordre, mois
    ORDER BY ordre asc;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 23
    Points
    23
    Par défaut parti trop vite
    merci de votre réponse, mon post était parti incomplet, je teste ça et je reviens

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 23
    Points
    23
    Par défaut pas encore
    je viens d'essayer avec la console phpmyadmin et sur ma page php :
    le mois d'aout fait tjs doublon, avec 0 comme "0", désolé
    je poste décidément trop vite :
    je vais essayer votre syntaxe...

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Au passage vous pouvez modifier votre UNION en UNION ALL.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    J'ai donc essayé ceci :
    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
    SELECT ordre, mois
           , sum(aht) AS aht, sum(atva) AS atva
           , sum(vht) AS vht, sum(vtva) AS vtva
           FROM (SELECT MONTH(date_achat) AS ordre, MONTHNAME(date_achat) AS mois,
                SUM(qte_achat*p_achat) AS aht, SUM(qte_achat*p_achat*tva_achat) AS atva,
                0 AS vht, 0 AS vtva
                FROM tab_achats AS a
                WHERE a.prev_achat=-1 AND YEAR(date_achat)='.$exercice.' AND a.lien_plancomptable>599999 AND a.lien_plancomptable<700000
                GROUP BY mois
                UNION
                SELECT MONTH(date_fact) AS ordre, MONTHNAME(date_fact) AS mois,
                0 AS aht, 0 AS atva,
                SUM(ht_fact) AS vht, SUM(tva_fact) AS vtva
                FROM tab_factures AS f
                WHERE YEAR(date_fact)='.$exercice.'
                GROUP BY mois
                )
                GROUP BY ordre, mois
                ORDER BY ordre ASC;
    qui me répond : Every derived table must have its own alias
    ...mais a et f sont déjà des alias ????

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il faut donner un nom à la requête imbriquée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GROUP BY mois
                ) as req
                GROUP BY ordre, mois
                ORDER BY ordre ASC;

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 23
    Points
    23
    Par défaut un énorme merci
    tout est dans le titre
    j'ajoute : à charge de revanche si vous avez besoin de plantes
    bonne journée à vous
    PS : je cherche le "résolu" et je cloture

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Javascript] Comment lier deux liste de sélection
    Par orleans dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/04/2006, 07h12
  2. [MySQL] afficher résultat requete "Select From ..."
    Par winnie82 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/03/2006, 11h14
  3. Utiliser le résultat de SELECT Sum dans If
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 33
    Dernier message: 15/11/2005, 08h38
  4. Comment avoir une fonction à deux résultats ?
    Par xenos dans le forum Langage
    Réponses: 9
    Dernier message: 02/10/2005, 10h32
  5. résultat de " select count "
    Par marie253 dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/06/2004, 12h07

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