Запрос перекрестной таблицы PostgreSQL, извлекающий столбцы из вспомогательного запроса

Мой перекрестный запрос 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, но это не сработало.


person aag    schedule 17.06.2012    source источник
comment
У вас есть ответ?   -  person Erwin Brandstetter    schedule 19.01.2017


Ответы (1)


В базовой форме запроса вы должны указать имена и типы столбцов в вызывающем SELECT.

Существуют варианты crosstabN(text), в которых используется предопределенный возврат типы.

Для полной автоматизации вам придется обернуть каждый отдельный запрос в функцию, где вы можете предварительно определить тип возвращаемого значения. Я разместил подробный пример здесь.

person Erwin Brandstetter    schedule 18.06.2012