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 PostgreSQL Discussion :

Mettre en colonne résultats en ligne


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 74
    Points : 40
    Points
    40
    Par défaut Mettre en colonne résultats en ligne
    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) :

    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
    ....
    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
     
        Mois      |    2014    |       2015    |    2016   
    -----------------------------------------------
        01        |     15    |       19      |     15
        02        |     11    |       22      |     13
        ...
        12        |     8     |       17      |
    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.

    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...

  2. #2
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Il faut voir du coté de tablefunc.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 74
    Points : 40
    Points
    40
    Par défaut
    Merci , ça a l'air super et on dirait que ça répond à ma question, mais le problème est que je ne peux pas l'utiliser vu que je n'ai pas la main sur la mise en place de modules et visiblement, il n'est pas installé : quand je lance les exemples, j'obtiens le message d'erreur "la fonction crosstab(unknown) n'existe pas"... !


    Je vais demander aux administrateurs mais en attendant, une autre idée ?

Discussions similaires

  1. [WD17] Calcul résultat de 2 colonne pour chaque ligne dans une table
    Par magicien33 dans le forum WinDev
    Réponses: 5
    Dernier message: 09/09/2013, 11h28
  2. Réponses: 4
    Dernier message: 12/08/2013, 17h59
  3. Réponses: 2
    Dernier message: 23/04/2012, 17h23
  4. Mettre des colonnes en ligne
    Par JCMAAL dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/06/2010, 10h56
  5. Comment mettre en colonne des resultats de plusieurs lignes
    Par shaun_the_sheep dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/04/2009, 11h41

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