PostgreSQL交叉表查询从帮助程序查询中提取列

时间:2012-06-17 18:33:45

标签: postgresql dynamic dynamic-sql crosstab

我的Postgres交叉表查询显示:

SELECT mthreport.*
FROM crosstab
('SELECT 
to_char(ipstimestamp, ''mon DD HH24h'') As row_name, 
varid::text || log.varid || ''_'' || ips.objectname::text As bucket, 
COUNT(*)::integer As bucketvalue
FROM loggingdb_ips_boolean As log 
INNER JOIN IpsObjects As ips 
ON log.Varid=ips.ObjectId
GROUP BY to_char(ipstimestamp, ''yyyy MM DD HH24h''), row_name, bucket 
ORDER BY to_char(ipstimestamp, ''yyyy MM DD HH24h''), row_name, bucket')
As mthreport(item_name text,
jan3 integer, feb4 integer, mar5 integer)

有什么方法可以从辅助查询中提取最后一行(jan3 integer等)中列举的三个项目?我试图用SELECT xyz FROM zyx替换最后一行,但这不起作用。

1 个答案:

答案 0 :(得分:2)

在查询的基本形式中,您必须拼出调用SELECT中的列名称和类型。

crosstabN(text)变体使用预定义的返回类型。

对于完全自动化,您必须将每个单独的查询包装到一个函数中,您可以在其中预定义返回类型。我发布了一个详细的例子here