交叉表查询中的Postgresql WITH子句

交叉表查询中的Postgresql WITH子句,postgresql,common-table-expression,crosstab,Postgresql,Common Table Expression,Crosstab,我使用WITH子句创建了一个大型查询,作为一个公共表表达式-month_索引。是否可以在交叉表查询的源sql中引用此公共表表达式 当我确实犯了一个错误 关系月份索引不存在 WITH month_index AS ( SELECT ... ) SELECT * FROM CROSSTAB( 'SELECT rowid AS row_name, CONCAT(''m'',monthno) AS category, nic5dindex AS value FROM

我使用WITH子句创建了一个大型查询,作为一个公共表表达式-month_索引。是否可以在交叉表查询的源sql中引用此公共表表达式

当我确实犯了一个错误 关系月份索引不存在

WITH month_index AS
(
      SELECT ...
)
SELECT * FROM CROSSTAB(
   'SELECT rowid AS row_name,
   CONCAT(''m'',monthno) AS category,
   nic5dindex AS value
   FROM month_index',
   '*<categorysql>*')
AS ct(..)

我使用Postgresql 9.3。

您希望将CTE完全包含在交叉表中。 更像这样。。。您可以在交叉表中使用CTE,但反之亦然

    SELECT * 
FROM CROSSTAB(
$$
    WITH month_index AS
    (
       SELECT rowid AS row_name,
       CONCAT(''m'',monthno) AS category,
       nic5dindex AS value
       FROM source_data_table
    )
    SELECT * FROM month_index 
,
   '*<categorysql>*'
$$   
   )
AS ct(..)

过时且不受支持的版本8.3没有通用表表达式。但我认为,即使支持的版本有CTE,交叉表功能也无法访问CTE。您需要创建一个视图,可以在传递给交叉表函数的SELECT语句中引用该视图。