Bonjour,
Derrière ce titre un peu étrange, je vais poser une question précise mais qui semble s'inscrire dans une demande plus générale.
Voici une situation qui me paraît fréquente : une table avec des données par date, et on aimerait extraire un agrégat (par exemple le total des ventes) par mois de chaque année. Avec un GROUP BY sur les mois et les années et un COUNT, on doit pouvoir arriver facilement au résultat sous la forme (par exemple) :
On aimerait plutôt obtenir quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Période | Total ----------------------- 01/2014 | 15 02/2014 | 11 ... 12/2014 | 8 01/2015 | 19 02/2015 | 22 ... 12/2015 | 17 01/2016 | 15 02/2016 | 13 ....
Bref, il s'agit comme le titre l'indique d'extraire en colonne des résultats qui arrivent "naturellement" en ligne dans une requête simple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Mois | 2014 | 2015 | 2016 ----------------------------------------------- 01 | 15 | 19 | 15 02 | 11 | 22 | 13 ... 12 | 8 | 17 |
J'ai réussi à faire cela en bricolant une fonction renvoyant le résultat pour une année et en faisant des jointures externes pour chaque année avec appel de cette fonction mais ça me paraît bien compliqué. J'ai réfléchi récemment à une solution en faisant des alias de ma colonne année et en restreignant pour chaque nouvelle colonne dans le WHERE mais je n'ai pas encore essayé de la mettre en œuvre.
Auriez-vous une méthode générale pour faire ce genre de travail qui est somme toute assez récurrent (ici ce sont des années, ça peut porter sur un autre champ) ?
NB : 1) Je travaille sous Postgresql mais une solution théorique "générale" m'intéresse aussi .
2) Une réponse du genre : ce que tu veux faire là c'est de la mise en forme, ce n'est pas le rôle de SQL et tout le tralala... OK, je sais bien, mais c'est bien le genre d'argument qui ne tient pas quand on doit répéter la même opération plusieurs fois et que chaque manipulation (via EXCEL ou autre) entraîne une perte de temps et un risque non négligeable d'erreurs...
Partager