来自三个表

时间:2015-12-02 14:21:17

标签: postgresql crosstab

我的数据库中有三个表要合并它们并使用crosstab功能显示它们,请查看此图:
enter image description here

因此,我尝试做的事情by following this answer是在一个视图中加入这三个表,然后在其上使用crosstab,如下所示:

create or replace view t as
SELECT a.code as code_an, n.code as code_n, montant
FROM analytic a JOIN analytic_has_nature ON (a.id = id_analytic)
JOIN nature n ON (n.id = id_nature);
SELECT *
FROM   crosstab(
      'SELECT code_an, code_n, montant
       FROM   t
       ORDER  BY 1,2')
AS t2 (code_an character varying(50), code_n character varying(50), montant double precision);


不幸的是,Postgresql向我显示了这个错误:

ERREUR:  return and sql tuple descriptions are incompatible

我错过了什么?

1 个答案:

答案 0 :(得分:0)

在返回元组中,您有一列code_n和三列double precision列。 在您的示例中,code_n是行标识符,code_an是一个类别,因此请在第一个查询中替换它们。 此外,添加第二个查询以定义类别(它确保正确分发不完整数据):

SELECT *
FROM   crosstab(
      'SELECT code_n, code_an, montant
       FROM   t
       ORDER  BY 1,2',
      'VALUES (''PDR''), (''EQ''), (''DIV'')')
AS t2 ( code_n character varying(50), 
        "PDR" double precision,
        "EQ" double precision, 
        "DIV" double precision);