PostgreSQL dit “retour et sql tuple descriptions sont incompatibles”

J'ai les données suivantes:

ID  CLASS   VALUE
1   NHB    700905.7243
1   HBW    164216.1311
1   HBO    700905.7243
2   NHB    146023.3792
2   HBW    89543.2972
2   HBO    82152.072
3   NHB    1409818.328
3   HBW    220430.7922
3   HBO    323512.9391
4   NHB    48711.3814
4   HBW    163385.1575
4   HBO    363352.3441

Que je veux réorganiser comme:

ID     HBO             HBW              NHB
1   700905.7243    164216.1311      700905.7243
2   82152.072      89543.2972       146023.3792
3   323512.9391    220430.7922      1409818.328
4   363352.3441    163385.1575      48711.3814

Veuillez noter que les valeurs dans les colonnes HBW, HBO et NHB totaux (somme).

Voici le script que j'utilise pour créer la sortie:

-- CREATE EXTENSION tablefunc;

SELECT *
FROM  CROSSTAB
(
    'SELECT _tlfd.id,   
    _tlfd."class",
    _tlfd."value"
    FROM public._tlfd
    WHERE _tlfd."class" = ''HBW'' or _tlfd."class" = ''HBO'' or _tlfd."class" = ''NHB'' 
    ORDER BY 1,2'
) 
    AS
(
    "class" int, 
    "HBW" text,
    "HBO" text,
    "NHB" text,
    --"Purpose" varchar, 
    "value" double precision
);

Quand je lance le script, j'obtiens cette erreur:

ERROR:  return and sql tuple descriptions are incompatible. 

Je ne suis pas sûr de ce que cela signifie et comment corriger l'erreur. Quelqu'un peut s'il vous plaît laissez-moi savoir:

  1. Ce que je fais mal dans le script?
  2. Mon script de produire le résultat désiré?
Essayez de supprimer "Weight" double precision de tableau croisé définition de ligne.
Il semble que vos "HBW", "HBO", ... les colonnes doivent être NUMERIC, pas TEXT.
Igor et Daniel, j'ai essayé vos solutions mais l'erreur reste !!!!. J'ai également modifié le script pour refléter correcte des noms de champ.
Il serait préférable de fournir la définition de la table avec les types de données - ce que vous obtenez avec \d tbl dans psql. En supposant que double precision pour votre colonnes de données. S'adapter à votre type de données ...

OriginalL'auteur user3357558 | 2014-02-26