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

 MySQL Discussion :

Somme sur requête


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut Somme sur requête
    Bonjour,

    Je rencontre un problème avec une requête qui permet de lister le mois, l'objectif, le chiffre réalisé, le pourcentage réalisé et le chiffre d'affaire cumulé.
    Voici la requete :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    SELECT 
       (CASE 
          WHEN month(T1.ACCDAT_0) = 1 THEN 'Janvier'
          WHEN month(T1.ACCDAT_0) = 2 THEN 'Février'
          WHEN month(T1.ACCDAT_0) = 3 THEN 'Mars'
          WHEN month(T1.ACCDAT_0) = 4 THEN 'Avril'
          WHEN month(T1.ACCDAT_0) = 5 THEN 'Mai'
          WHEN month(T1.ACCDAT_0) = 6 THEN 'Juin'
          WHEN month(T1.ACCDAT_0) = 7 THEN 'Juillet'
          WHEN month(T1.ACCDAT_0) = 8 THEN 'Aout'
          WHEN month(T1.ACCDAT_0) = 9 THEN 'Septembre'
          WHEN month(T1.ACCDAT_0) = 10 THEN 'Octobre'
          WHEN month(T1.ACCDAT_0) = 11 THEN 'Novembre'
          WHEN month(T1.ACCDAT_0) = 12 THEN 'Décembre' 
       END) as 'Mois', 
    ( 
          SELECT round((T2.CHIFFRE_0/12),2) 
          FROM OBJECTIF T2
          WHERE T2.REPNUM_0 = 'XXX'
          AND T2.EXDEB_0 = '2012-04-01'
          AND T2.EXFIN_0 = '2013-03-31'
    ) as 'Objectif',
    (
           SELECT sum(T3.AMTNOT_0)
           FROM SINVOICE T3
           WHERE T3.REP_0 = 'XXX' 
           AND T3.ACCDAT_0 BETWEEN '2012-04-01' AND '2013-03-31'
           AND month(T3.ACCDAT_0)=month(T1.ACCDAT_0)
    ) as 'Réalisé',
        round((sum(T1.AMTNOT_0)*100/(
    (SELECT round(O.CHIFFRE_0,2) 
          FROM OBJECTIF O
          WHERE O.REPNUM_0 = 'XXX'
          AND O.EXDEB_0 = '2012-04-01'
          AND O.EXFIN_0 = '2013-03-31')
    /12)),2) as '% Réalisé',
    (
       SELECT sum(T4.AMTNOT_0)
       FROM SINVOICE T4
       WHERE T4.ACCDAT_0 BETWEEN '2012-04-01' AND '2013-03-31' 
       AND T4.REP_0 = 'XXX'
       AND month(T4.ACCDAT_0) <= month(T1.ACCDAT_0)
    ) as 'Chiffre Cumulé'
     
    FROM SINVOICE T1
    WHERE T1.REP_0 = 'XXX'
    AND T1.ACCDAT_0 BETWEEN '2012-04-01' AND '2013-03-31'
    GROUP BY Mois
    ORDER BY T1.ACCDAT_0
    voici le résultat obtenu :

    Le cumul commence en janvier et non en Avril et je ne comprend pas pourquoi (le mois d'avril est le debut de l'exercice ^^)

    Aussi je voulais savoir s'il existait un autre moyen que je refaire une sous-requetes pour récupérer une donnée deja présente sur la meme ligne mais sur une colonne différente : ici OBECETIF pour le % réalisé...

    Merci à vous ...

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 063
    Par défaut
    Citation Envoyé par siro1 Voir le message
    Le cumul commence en janvier et non en Avril et je ne comprend pas pourquoi (le mois d'avril est le debut de l'exercice ^^)
    Certes, mais à partir des numéros de mois, janvier est toujours inférieur à avril (1 < 4).
    Or, dans votre sous-requête des cumuls, vous mettez la condition suivante WHERE month(T3.ACCDAT_0) <= month(T1.ACCDAT_0). En ne mettant cette condition que sur le mois, c'est normal que janvier apparaisse avant avril. Il va vous falloir ajouter l'année dans la condition...

    Citation Envoyé par siro1 Voir le message
    Aussi je voulais savoir s'il existait un autre moyen que je refaire une sous-requetes pour récupérer une donnée déjà présente sur la même ligne mais sur une colonne différente : ici OBECETIF pour le % réalisé...
    Oui, en faisant une jointure entre SINVOICE et OBJECTIF, puisque visiblement REP_0 = REPNUM_0, et les périodes sont également identiques...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut
    Bien vu ! Le problème était bien l'année.

    Concernant l'UNION, je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    ...
    UNION
    SELECT T2.CHIFFRE_0
    FROM OBJECTIF T2
    WHERE T2.REPNUM_0 = 'XXX'
    AND T2.EXDEB_0 = '2012-04-01'
    AND T2.EXFIN_0 = '2013-03-31'
    Mais avec quel alias utiliser le "CHIFFRE_0" dans la requête plus haut ?
    T1 ? T2 ?

    Merci encore

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 063
    Par défaut
    Si c'est une colonne que vous souhaitez, il ne faut pas faire une UNION, mais une jointure.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut
    Ok je me renseigne sur les jointures ... désolé je début le SQL mes questions vous paraissent surement enfantin...

    Sinon pour d'autres questions sur une autre requête... je dois créer un nouveau post ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut
    Mon second est une requete qui me permet de lister les chiffre d'affaire selon l'année le mois et le département :

    Voici la requete :
    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
     
    SELECT 
        DEP_0 AS 'Dép',
        year(ACCDAT_0) AS 'Année',
        SUM(CASE WHEN month(ACCDAT_0) = 4 AND year(ACCDAT_0)=year('2012-04-01') THEN AMTNOT_0 ELSE 0 END) AS Avril,
        SUM(CASE WHEN month(ACCDAT_0) = 5 AND year(ACCDAT_0)=year('2012-04-01') THEN AMTNOT_0 ELSE 0 END) AS Mais,
        SUM(CASE WHEN month(ACCDAT_0) = 6 AND year(ACCDAT_0)=year('2012-04-01') THEN AMTNOT_0 ELSE 0 END) AS Juin,
        SUM(CASE WHEN month(ACCDAT_0) = 7 AND year(ACCDAT_0)=year('2012-04-01') THEN AMTNOT_0 ELSE 0 END) AS Juillet,
        SUM(CASE WHEN month(ACCDAT_0) = 8 AND year(ACCDAT_0)=year('2012-04-01') THEN AMTNOT_0 ELSE 0 END) AS Aout,
        SUM(CASE WHEN month(ACCDAT_0) = 9 AND year(ACCDAT_0)=year('2012-04-01') THEN AMTNOT_0 ELSE 0 END) AS Septembre,
        SUM(CASE WHEN month(ACCDAT_0) = 10 AND year(ACCDAT_0)=year('2012-04-01') THEN AMTNOT_0 ELSE 0 END) AS Octobre,
        SUM(CASE WHEN month(ACCDAT_0) = 11 AND year(ACCDAT_0)=year('2012-04-01') THEN AMTNOT_0 ELSE 0 END) AS Novembre,
        SUM(CASE WHEN month(ACCDAT_0) = 12 AND year(ACCDAT_0)=year('2012-04-01') THEN AMTNOT_0 ELSE 0 END) AS Decembre,
        SUM(CASE WHEN month(ACCDAT_0) = 1 AND year(ACCDAT_0)=year('2013-04-01') THEN AMTNOT_0 ELSE 0 END) AS Janvier,
        SUM(CASE WHEN month(ACCDAT_0) = 2 AND year(ACCDAT_0)=year('2013-04-01') THEN AMTNOT_0 ELSE 0 END) AS Février,
        SUM(CASE WHEN month(ACCDAT_0) = 3 AND year(ACCDAT_0)=year('2013-04-01') THEN AMTNOT_0 ELSE 0 END) AS Mars,
        SUM(AMTNOT_0) AS Cumul
    FROM SINVOICE
    WHERE REP_0 = 'XXX'
    AND ACCDAT_0 >= '2012-04-01'
    AND ACCDAT_0 <= '2013-03-31' 
    GROUP BY DEP_0, year(ACCDAT_0)
    ORDER BY DEP_0
    Voici le resultat :


    Souci : Sur 2012 En janvier on a plus rien , les données continuent sur la ligne suivante (2012) comment faire pour avoir sur une meme ligne les données de Avril 2012 jusqu'a Mars 2013 ?

    Comment je fais pour avoir plusieurs années ?
    2010/2011
    2011/2012
    2012/2013

    etc ...

Discussions similaires

  1. [AC-2003] Somme sur requête analyse croisée
    Par willytito dans le forum Access
    Réponses: 2
    Dernier message: 06/03/2015, 18h43
  2. Problème de somme sur sous-requête
    Par juju05 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/08/2011, 10h49
  3. [WB 16] requête somme sur deux tables
    Par PaulNero dans le forum WebDev
    Réponses: 5
    Dernier message: 14/06/2011, 12h22
  4. Somme sur conditions imbriquée dans une requête
    Par aleximan dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/01/2008, 18h05
  5. problème sur requête sur 3 tables avec une somme
    Par tomguiss dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/12/2007, 16h44

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