Re: [pgbr-geral] Consulta linha x coluna
2013/6/24 Romulo Souza romulocso...@gmail.com 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 matioli.math...@gmail.com escreveu: 2013/6/20 Romulo Souza romulocso...@gmail.com 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Consulta linha x coluna
Prezado Matheus, muito obrigado pela resposta. Vou implementar a sua solução durante essa semana. Abraço, Rômulo. Em 23 de junho de 2013 14:59, Matheus de Oliveira matioli.math...@gmail.com escreveu: 2013/6/20 Romulo Souza romulocso...@gmail.com 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Consulta linha x coluna
2013/6/20 Romulo Souza romulocso...@gmail.com 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Consulta linha x coluna
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? Abraços, Rômulo. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral