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

Requêtes MySQL Discussion :

[Pivot] Mois de l'année


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Pivot] Mois de l'année
    Hello,

    J'ai ce schema :

    User(id....)
    TypeAbsence(id....)
    Absence(id, user_id, type_id, date)

    grâce à la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT month( a.date ) AS Mois, count( a.id ) AS Absences, at.label AS
    TYPE
    FROM absence a, user u, absence_type at
    WHERE a.person_id = u.id
    AND a.absencetype_id = at.id
    AND u.id =2
    AND a.year =2009
    GROUP BY month( a.date ), a.absencetype_id
    Les données sont les bonnes, mais je voudrais faire un pivot pour passer de :

    1 2 Congé
    1 2 Récupération
    2 2 Congé
    3 1 Congé
    3 3 Récupération
    3 1 Mission
    4 2 Congé
    4 3 Récupération
    4 2 Mission

    à

    Janvier Février Mars Avril Mai.....
    Congé 2...
    Récup 2...
    Mission 0...

    J'ai cru comprendre qu'il fallait faire ça à la main avec MySQL. Mais j'avoue que les cross tables me dépassent complètement.
    Dernière modification par Invité ; 20/04/2011 à 16h12.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je suis arrivé à ça, mais le problème est que tous mes résultats ne s'affiche que pour janvier.

    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
    SELECT
    at.label,
    if(month(a.startdate)=1, count(a.id), 0) AS Janvier,
    if(month(a.startdate)=2, count(a.id), 0) AS Fevrier,
    if(month(a.startdate)=3, count(a.id), 0) AS Mars,
    if(month(a.startdate)=4, count(a.id), 0) AS Avril,
    if(month(a.startdate)=5, count(a.id), 0) AS Mai,
    if(month(a.startdate)=6, count(a.id), 0) AS Juin,
    if(month(a.startdate)=7, count(a.id), 0) AS Juillet,
    if(month(a.startdate)=8, count(a.id), 0) AS Aout,
    if(month(a.startdate)=9, count(a.id), 0) AS Septembre,
    if(month(a.startdate)=10, count(a.id), 0) AS Octobre,
    if(month(a.startdate)=11, count(a.id), 0) AS Novembre,
    if(month(a.startdate)=12, count(a.id), 0) AS Decembre
     
    FROM absence a, user u, absence_type at
    WHERE a.person_id = p.id
    AND a.absencetype_id = at.id
    AND u.id =2
    AND a.year =2009
    GROUP BY a.absencetype_id

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai trouvé, la solution est de compter +1 ou 0, au lieu de faire un count(). Ce qui donne :

    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
    SELECT
        at.label,
        sum(if(month(a.startdate)=1, 1, 0)) AS Janvier,
        sum(if(month(a.startdate)=2, 1, 0)) AS Fevrier,
        sum(if(month(a.startdate)=3, 1, 0)) AS Mars,
        sum(if(month(a.startdate)=4, 1, 0)) AS Avril,
        sum(if(month(a.startdate)=5, 1, 0)) AS Mai,
        sum(if(month(a.startdate)=6, 1, 0)) AS Juin,
        sum(if(month(a.startdate)=7, 1, 0)) AS Juillet,
        sum(if(month(a.startdate)=8, 1, 0)) AS Aout,
        sum(if(month(a.startdate)=9, 1, 0)) AS Septembre,
        sum(if(month(a.startdate)=10, 1, 0)) AS Octobre,
        sum(if(month(a.startdate)=11, 1, 0)) AS Novembre,
        sum(if(month(a.startdate)=12, 1, 0)) AS Decembre
     
        FROM absence a, user u, absence_type at
        WHERE a.person_id = p.id
        AND a.absencetype_id = at.id
        AND u.id =2
        AND a.year =2009
        GROUP BY a.absencetype_id

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

Discussions similaires

  1. [SQL Server] extraire le mois et l'année d'une date
    Par calison3 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/03/2006, 12h16
  2. [ORACLE 9i] Avoir 12 lignes pour 12 mois de chaque années
    Par Worldofdada dans le forum Oracle
    Réponses: 4
    Dernier message: 17/11/2005, 11h57
  3. Réponses: 16
    Dernier message: 29/04/2005, 14h39
  4. Réponses: 1
    Dernier message: 28/10/2004, 21h27
  5. Récupérer le mois et l'année d'une date
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 09h17

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