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 Re : Général » Création d'un tableau croisé » 26/10/2016 00:09:46

Bon, en fait, j'ai corrigé ma requête mais je ne comprends pas pourquoi.

J'ai fait ma première requête:

select distinct nom from enq_region;

Ca m'a sorti ma liste de région: région_1, region_2, etc...

Puis je fais le cross tab. Et dans le as ct(...) j'ai mis les régions dans l'ordre de sorti de la requête précédente. A savoir region_1, 2, 3, etc... Or, en fait, ça marche si je les mets dans l'ordre inverse: region_5, region_4, region_3, etc...

Je ne sais pas si je suis clair.

Mais je me demande pourquoi. Qu'est ce qui détermine l'ordre des colonnes? Car du coup je dois le connaître pour réaliser mon ct(...), non?

Est-ce qu'il n'est pas possible d'automatiser la chose? Pour l'instant je fais avec 5 régions mais je pourrai aussi le faire pour 4 ou 15.

#2 Re : Général » Création d'un tableau croisé » 26/10/2016 00:02:46

Ok, merci!

Alors ça marche mais ça ne sort pas ce que j'espérais...

Comme je l'ai dit, suis assez novice. J'ai jamais eu de formation dans ce domaine. J'avais déjà vu la page http://docs.postgresql.fr/9.6/tablefunc.html mais c'est du chinois pour ça smile

Voici ma requête:

select distinct nom from enq_zone;

SELECT *
     FROM crosstab('
        SELECT prod,region,count(distinct id_entreprise) as nb
                FROM enq_region
                group by prod,region
                order by prod',

         'SELECT region
                FROM enq_region
                group by region
                order by region')
AS ct
(
"Prod" text,
"region_1" bigint,
"region_2" bigint,
"region_3" bigint,
"region_4" bigint,
"region_5" bigint);

Le soucis c'est que cela ne m'associe pas les bonnes régions aux bons décompte (count(distinct id_entreprise))...

Une idée??

#3 Re : Général » Création d'un tableau croisé » 25/10/2016 20:58:34

Personne ne peut m'éclairer?? Je suis vraiment coincé là... sad

#4 Re : Général » Création d'un tableau croisé » 20/10/2016 13:04:05

Effectivement, il me renvoit un bigint mais même si je mets ça

AS ct(prod text, region text, nb bigint);

J'ai ça comme résultat:

ERREUR: return and sql tuple descriptions are incompatible
État SQL :42601

#5 Re : Général » Création d'un tableau croisé » 20/10/2016 10:29:08

Bonjour

Je me permets de relancer ce post. Je suis comme Tipie, novice et cherchant à faire un tableau croisé, mais pour ma part, j'ai le message d'erreur suivant:

ERREUR: return and sql tuple descriptions are incompatible
État SQL :42601

Apparemment, c'est la définition de "numeric" qui pourrait poser problème.

Pour remettre les choses dans leur contexte, j'ai une table avec des identifiants d'entreprise (id_entreprise), situées dans différentes région (region), produisant différents produits (prod). Je cherche à sortir un tableau avec en ligne les produits, en colonne les régions et dans le tableau le nombre d'entreprise qui produisent les produits en question dans chaque région.

SELECT *
FROM crosstab(
  'select prod,region, count(distinct id_entreprise) as nb from enq_region group by prod, region')
AS ct(prod text, region text, nb numeric);


Où est l'erreur??

Pied de page des forums

Propulsé par FluxBB