Re: [pgbr-geral] Consulta linha x coluna

2013-06-25 Por tôpico Matheus de Oliveira
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

2013-06-24 Por tôpico Romulo Souza
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-06-23 Por tôpico Matheus de Oliveira
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

2013-06-20 Por tôpico Romulo Souza
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