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
Atenciosamente,
--
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