Pivot / Crosstab PostgreSQL ERROR: invalid return type

Pivot / Crosstab PostgreSQL ERROR: invalid return type

您好,我创建了一个视图,但我想用动态年份来旋转它。

旋转前的输出:

预期输出:

我的查询:

SELECT *
FROM crosstab(
'   select b.jenisiuran,
    date_part(''year''::text, a.insertdate) AS tahun,
    sum(b.jumlah_amt) AS jumlah
    FROM blm_dpembayaraniuran a
    JOIN blm_dpembayaraniuranline b ON a.blm_dpembayaraniuran_key::text = b.blm_dpembayaraniuran_key::text
    GROUP BY date_part(''year''::text, a.insertdate), b.jenisiuran'  
) AS (TRANSAKSI TEXT, "2019" NUMERIC, "2020" NUMERIC, "2021" numeric);

我收到这样的错误:

ERROR: invalid return type
Detail: SQL rowid datatype does not match return rowid datatype.

谢谢你帮助我

我发现使用过滤聚合比 crosstab()

更容易使用
select b.jenisiuran as transaksi,
       sum(b.jumlah_amt) filter (where extract(year from a.insertdate) = 2019) as "2019",
       sum(b.jumlah_amt) filter (where extract(year from a.insertdate) = 2020) as "2020",
       sum(b.jumlah_amt) filter (where extract(year from a.insertdate) = 2021) as "2021",
       sum(b.jumlah_amt) as total
FROM blm_dpembayaraniuran a
  JOIN blm_dpembayaraniuranline b ON a.blm_dpembayaraniuran_key::text = b.blm_dpembayaraniuran_key::text
WHERE a.insertdate >= date '2019-01-01' 
  AND a.insertdate <  date '2022-01-01'
GROUP b.jenisiuran;

inserdate 上添加范围条件应该会提高性能,因为只需对所需范围内的行进行分组,而不是对两个表中的所有行进行分组。