来自三个表的 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);
我的数据库中有三个表,我想合并它们并使用 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);