来自三个表的 Postgresql 交叉表

Postgresql crosstab from three tables

我的数据库中有三个表,我想合并它们并使用 crosstab 函数显示它们,请查看这张图片:

所以我尝试做的 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

我错过了什么?

在 return 元组中,一列为 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);