2013/6/24 Romulo Souza <[email protected]> > Prezado Matheus, > > muito obrigado pela resposta. Vou implementar a sua solução durante essa > semana. > > Tranquilo.
> Em 23 de junho de 2013 14:59, Matheus de Oliveira < > [email protected]> escreveu: > >> >> 2013/6/20 Romulo Souza <[email protected]> >> >>> Prezados colegas, >>> >>> a partir da query: >>> >>> SELECT * FROM >>> ( >>> SELECT t.ano, >>> s.sexo, >>> SUM(f.qt_obito) obitos >>> FROM f_sim f >>> JOIN dim_tempo t ON (t.id=f.id_ano) >>> JOIN dim_sexo s ON (s.id=f.id_sexo) >>> GROUP BY t.ano,s.sexo >>> ORDER BY t.ano,s.sexo >>> ) tb1 >>> >>> como eu faço para obter uma consulta do tipo linha x coluna? O que >>> preciso: nas linhas os valores dos anos e nas colunas as quantidades de >>> óbitos, segundo sexo. Tentei alterar a query a partir de exemplos que vi >>> utilizando crosstab, mas não fui capaz de resolver o problema. Alguém, por >>> favor, poderia me auxiliar? >>> >>> >> No seu caso, o modo mais fácil usando a função crosstab da tablefunc [1], >> com a variante com dois parâmetros: o primeiro é sua consulta (como já >> definiu), a segunda uma consulta que retorne apenas os sexos (M, F). Dessa >> forma, mesmo que em algum ano não tenha óbitos dos dois sexos, o resultado >> ainda aparecerá (valor null quando não encontrado). Seguindo seu exemplo >> ficaria assim (deve testar): >> >> SELECT * FROM crosstab($$ >> SELECT t.ano, >> s.sexo, >> SUM(f.qt_obito) obitos >> FROM f_sim f >> JOIN dim_tempo t ON (t.id=f.id_ano) >> JOIN dim_sexo s ON (s.id=f.id_sexo) >> GROUP BY t.ano,s.sexo >> ORDER BY t.ano,s.sexo >> $$, $$VALUES('M'),('F')$$ >> ) AS tb1(ano int, fem int, masc int); >> >> >> [1] >> http://www.postgresql.org/docs/current/static/tablefunc.html#AEN144882 >> >> Um detalhe, vi que está errado a ordem do segundo parâmetro com o alias da tabela, esta "M,F" nos parâmetros e "fem,masc" nos alias, deveria ser assim: ... $$, $$VALUES('F'),('M')$$ ) AS tb1(ano int, fem int, masc int); At. -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
