我的数据库中有三个表要合并它们并使用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
我错过了什么?
答案 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);