PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 12/09/2014 16:28:29

vidji
Membre

Requete SQL - Tableau croisée dynamique

Bonjour,

Je souhaiterais afficher des valeurs mensuelles en les comparants avec les années précédentes, cela implique un nombre de colonne dynamique, mais je ne sais pas comment le réaliser en sql ou pl/sql.

MOIS     | ANNEE N-2 | ANNEE N-1 | ANNEE N
Janvier  |      176  |       244 |      154
Février  |      176  |       244 |      154
Mars     |      176  |       244 |      154
Avril    |      176  |       244 |      154

En attendant j'applique la méthode rustique mais c'est très moyen.
SELECT mois, (SELECT t1.valeur
                FROM matable t1
               WHERE t1.annee=2008 AND t1.mois=r.mois) AS_2008,
               (SELECT t2.valeur
                FROM matable t2
               WHERE t2.annee=2009 AND t2.mois=r.mois) AS _2009
FROM ref_mois r

Une idée sur une fonction pgSQL qui pourrait aider ?

@+

=> postgresSQL 9.0

Dernière modification par vidji (12/09/2014 16:30:23)

Hors ligne

#2 12/09/2014 18:22:06

gleu
Administrateur

Re : Requete SQL - Tableau croisée dynamique

Votre méthode rustique fonctionnerait mieux avec des jointures mais elle est fonctionnelle. Donc où est votre problème ?


Guillaume.

Hors ligne

#3 15/09/2014 10:05:16

vidji
Membre

Re : Requete SQL - Tableau croisée dynamique

Le problème est que je doive mettre manuellement chaque année, donc à chaque nouvelle année il faudra compléter la requête. (c'est pour un tableau de bord de suivi)
J'aurais souhaité quelque chose de plus autonome qui ce baserait sur une table de référence "année".

Hors ligne

#4 15/09/2014 15:52:23

gleu
Administrateur

Re : Requete SQL - Tableau croisée dynamique

Étant donné que le nombre de colonnes change suivant le nombre d'années demandées, vous ne pourrez le faire ni avec une fonction en SQL ni avec une fonction en PL/pgsql. Plus exactement, en PL/pgsql, c'est possible, mais pour exécuter la fonction, vous aurez besoin de dire à PostgreSQL les colonnes renvoyées, ce qui supprime l'intérêt de la fonction.


Guillaume.

Hors ligne

#5 23/09/2014 11:34:21

vidji
Membre

Re : Requete SQL - Tableau croisée dynamique

OK, dommage.

Merci pour la réponse.

Hors ligne

Pied de page des forums