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 27/04/2016 14:39:08

pljavabruno
Membre

Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

Bonjour à tous,
je ne parviens pas à exécuter une requete avec la commande CROSSTAB, j'ai une erreur :

function crosstab(unknown) does not exist

ERROR: function crosstab(unknown) does not exist
État SQL :42883
Astuce : No function matches the given name and argument types. You might need to add explicit type casts.


Merci de m'accorder un peu de votre temps précieux.

Hors ligne

#2 27/04/2016 14:44:39

ruizsebastien
Membre

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

Bonjour,

Avez-vous installé l'extension "tablefunc" ?

A exécuter avec le superuser dans votre base de données :
CREATE EXTENSION tablefunc;


Cordialement,

Sébastien.

Hors ligne

#3 27/04/2016 14:55:00

pljavabruno
Membre

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

SVP ! comment l'installer .

Merci pour votre prompt réaction.

Hors ligne

#4 27/04/2016 15:02:08

ruizsebastien
Membre

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

Comme je disais dans mon message précédent :
simple commande sql avec un superuser
CREATE EXTENSION tablefunc;


Cordialement,

Sébastien.

Hors ligne

#5 27/04/2016 15:06:49

pljavabruno
Membre

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

Merci,
quand j'exécute la requête

select * from pg_available_extensions;

je vois bien tablefunc 1.0  dans la liste, je ne sais pas s'il faut tjrs exécuter CREATE EXTENSION tablefunc;   pour que ça marche.

Hors ligne

#6 27/04/2016 16:50:08

pljavabruno
Membre

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

Merci ça marche, seulement j'ai un dernier souci:
quand je fait cette requete

select * from crosstab
(
    'select s.libelle as salle, EXTRACT(year FROM now()) -  EXTRACT(year FROM i.datenais) as age,
    count( EXTRACT(year FROM now()) -  EXTRACT(year FROM i.datenais)) as fb
    from user_individu i
    inner join user_annualregistration a on i.idperson = a.ideleve
    inner join core_salle s on a.idsalle = s.idsalle
    inner join core_serie si on s.idserie = si.idserie
    inner join core_niveau n on s.idniveau = n.idniveau
    and a.isinscription = true
    group by salle ,age
    order by salle'
)
AS ct
(
    "nombrefg" double precision,"nombre" double precision,"age" integer
);


ça me renvoie l'erreur suivant :

ERROR:  invalid return type
DETAIL:  SQL rowid datatype does not match return rowid datatype.
********** Erreur **********

ERROR: invalid return type
État SQL :42601
Détail :SQL rowid datatype does not match return rowid datatype.


j'ai tout asayer sans succès


Merci pour votre aide

Hors ligne

#7 27/04/2016 17:10:52

ruizsebastien
Membre

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

A tout hasard : quel est le type de la colonne datenais de la table user_individu ?


Cordialement,

Sébastien.

Hors ligne

#8 27/04/2016 18:26:40

pljavabruno
Membre

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

la colonne datenais est de type date

Hors ligne

#9 27/04/2016 18:43:55

pljavabruno
Membre

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

Pour le moment j'ai  fais ceci:

select * from crosstab
(
    'select s.libelle as salle, EXTRACT(year FROM now()) -  EXTRACT(year FROM i.datenais) as age,
    count( EXTRACT(year FROM now()) -  EXTRACT(year FROM i.datenais)) as fb
    from individu i
    inner join user_annualregistration a on i.idperson = a.ideleve
    inner join core_salle s on a.idsalle = s.idsalle
    inner join core_serie si on s.idserie = si.idserie
    inner join core_niveau n on s.idniveau = n.idniveau
    and a.isinscription = true
    group by salle ,age
    order by 1,2',
    $$VALUES ('salle'::text), ('Age')$$
)
AS age
(
    "salle" text, "Age" integer, "Nombre" integer
);


je n'ai plus d'erreur, mais les colonnes Age et  Nombre sont vides pourtant elles contiennent des données si on exécute la requête sans croostab, c'est à dire:

select s.libelle as salle, EXTRACT(year FROM now()) -  EXTRACT(year FROM i.datenais) as age,
    count( EXTRACT(year FROM now()) -  EXTRACT(year FROM i.datenais)) as fb
    from individu i
    inner join user_annualregistration a on i.idperson = a.ideleve
    inner join core_salle s on a.idsalle = s.idsalle
    inner join core_serie si on s.idserie = si.idserie
    inner join core_niveau n on s.idniveau = n.idniveau
    and a.isinscription = true
    group by salle ,age
    order by 1,2

Merci pour votre aide

Hors ligne

#10 27/04/2016 23:56:26

gleu
Administrateur

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

Vous mélangez minuscule et majuscule. À mon avis, c'est pour cela que certaines colonnes (celles dont la première lettre est en majuscule) apparaissent NULL. Soyez cohérent, soit tout en minuscule, soit tout en majuscule.


Guillaume.

Hors ligne

#11 28/04/2016 19:13:26

pljavabruno
Membre

Re : Activer ou intégrer la commande PIVOT/CROSSTAB dans postgresql 9.4

Merci,
j'ai mis tout en minuscule, mais jusque là aucun changement

merci pour votre reaction

Hors ligne

Pied de page des forums