【问题标题】:Postgresql WITH clause in crosstab queries交叉表查询中的 Postgresql WITH 子句
【发布时间】:2015-11-05 10:32:48
【问题描述】:

我使用WITH 子句将大型查询创建为公用表表达式-month_index。是否可以在交叉表查询的源 sql 中引用此公用表表达式?

当我做得到一个错误 关系“month_index”不存在

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。

【问题讨论】:

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

标签: postgresql common-table-expression crosstab


【解决方案1】:

您希望将 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(..)

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 2018-12-13
    • 2022-07-29
    相关资源
    最近更新 更多