Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/04/2011, 15h48   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 111
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 111
Points : 12
Points : 12
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 :
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.
Siriru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 16h14   #2
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 111
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 111
Points : 12
Points : 12
Je suis arrivé à ça, mais le problème est que tous mes résultats ne s'affiche que pour janvier.

Code :
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
Siriru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 17h49   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 111
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 111
Points : 12
Points : 12
J'ai trouvé, la solution est de compter +1 ou 0, au lieu de faire un count(). Ce qui donne :

Code :
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
Siriru est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h23.


 
 
 
 
Partenaires

Hébergement Web