2011/2/10 Alexsander Rosa <[email protected]>

> Eu gostaria de algo assim:
>
> select * from alguma_funcao(
>   'select year, month, qty from sales order by 1',
>   'select m from generate_series(1,12) m',
>
>   'select nome_mes from calendario order by 1');
>
> Isso existe?
>
>
>
Alexander,

Veja se isso ajuda:

http://www.postgresonline.com/journal/archives/14-CrossTab-Queries-in-PostgreSQL-using-tablefunc-contrib.html

Foi o meu primeiro (e único) contato com essa contrib... usei ela para
listar os salários pagos por mês de cada funcionário na folha de
pagamento... a query que utilizei é a que segue:

SELECT relatorio.*
  FROM crosstab($$
  select cast(to_char(r14_regist, '000000') || '-' || z01_nome as text) as
row_name,
         cast(to_char(date '2010-01-01' + ((r14_mesusu-1)||'
month')::interval, 'mon') as text) as bucket,
         cast(round(sum(r14_valor),2) as integer) as bucketvalue
    from gerfsal
         inner join rhpessoal on rh01_regist = r14_regist
         inner join cgm       on z01_numcgm  = rh01_numcgm
   where r14_anousu = 2010
     and r14_pd     = 1
group by r14_anousu,
         r14_mesusu,
         r14_regist,
         z01_nome
order by 1, r14_mesusu $$,
               $$SELECT to_char(date '2010-01-01' + (n || '
month')::interval, 'mon') As short_mname
                  FROM generate_series(0,11) n$$) AS relatorio(item_name
text,
                                                              jan integer,
                                                              feb integer,
                                                              mar integer,
                                                              apr integer,
                                                              may integer,
                                                              jun integer,
                                                              jul integer,
                                                              aug integer,
                                                              sep integer,
                                                              oct integer,
                                                              nov integer,
                                                              dec integer);

Essa query vai listar a Matricula e Nome do Funcionário e o valor bruto do
salário mês a mês do ano de 2010.

Não sei se ajudei muito, mas aquele artigo me ajudou bastante a construir
essa query.

-- 
Fabrízio de Royes Mello
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a