Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Pages : 1