Fórum DBGrid: colunas em tempo de execução (problemático!!!) #211952
05/02/2004
0
Esta eu acho que vai dar um pouquinho mais de trabalho.
[b:1affde3966]Considere o Select abaixo:[/b:1affde3966]
Select TIPO, Month(DATA) as MES, Sum(VALOR) as VALOR from TABELA group by TIPO, Month(DATA) order by Month(DATA)
Esta pesquisa seleciona todos os registros de uma tabela, agrupa-os por TIPO e em seguida por mês e soma os valores encontrados em cada mês individualmente.
Ex.: Suponha que em Janeiro existam os registros de TIPO1 com Valor = 20, TIPO1 (novamente) com Valor = 18, TIPO2 com Valor = 47 e TIPO2 (novamente) com Valor = 35. A pesquisa apresenta como resultado o seguinte: Em Janeiro há para o TIPO1 o Valor = 38 (soma dos registros encontrados p/ o TIPO1) e para o TIPO2 o Valor = 82 (soma dos valores encontrados p/ o TIPO2. Isso acontece para todos os meses, o que faz com que sejam obtidos então 12 meses com 12 valores correspondentes a cada um dos meses. Até aí ok!
[b:1affde3966]O problema é:[/b:1affde3966]
Eu preciso que através da pesquisa acima seja exibido em um DBGrid as seguintes colunas: Coluna1 = TIPO (cada linha possuirá um TIPO), Colunas 2 a 13 serão os meses do ano, onde a célula do DBGrid que fica no cruzamento da Linha (TIPO) com a Coluna (mês), mostrará o valor somado de cada mês. Neste caso acima, a célula de cruzamento da linha TIPO1 com a Coluna Janeiro, mostrará 38. A célula de cruzamento da linha TIPO2 com a Coluna Janeiro, mostrará 82. Se houvessem registros de valores em outros meses para o TIPO1 e/ou para o TIPO2, o processo seria o mesmo e existirá tantos Tipos quantos forem necessários.
Alguém pode dar uma ajuda p/ fazer isso?
Grato.
wbb
Wbb
Curtir tópico
+ 0Posts
05/02/2004
Ronaldomelo
Pelo que entendi vc quer que o dbgrig apresente o seguinte resultado:
[b:1858c00b24] Tipo Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez[/b:1858c00b24]
1 0 1 100 0 0 0 0 0 0 0 0 0
2 1 3 6 5 0 0 0 0 2 3 5 6
Se o Formato for esse e o banco que vc esteja utilizando for Firebird
Vc pode utilizar Funções Externas do Banco Udf´s Que Vc Baixa em www.comunidade-firebird.org e fazer o script da consulta da seguinte maneira.
Select Tipo,
extract(Month from Data) as MES,
Sum(Valor) * udf_pos(extract(Month from Data),1) as val_janeiro,
Sum(Valor) * udf_pos(extract(Month from Data),2) as val_fevereiro,
Sum(Valor) * udf_pos(extract(Month from Data),3) as val_marco,
Sum(Valor) * udf_pos(extract(Month from Data),4) as val_abril,
Sum(Valor) * udf_pos(extract(Month from Data),5) as val_maio,
Sum(Valor) * udf_pos(extract(Month from Data),6) as val_junho,
Sum(Valor) * udf_pos(extract(Month from Data),7) as val_julho,
Sum(Valor) * udf_pos(extract(Month from Data),8) as val_agosto,
Sum(Valor) * udf_pos(extract(Month from Data),9) as val_setembro,
Sum(Valor) * udf_pos(extract(Month from Data),10) as val_outubro,
Sum(Valor) * udf_pos(extract(Month from Data),11) as val_novembro,
Sum(Valor) * udf_pos(extract(Month from Data),12) as val_dezembro
From Tabela
group by Tipo,
extract(Month from Data)
order by Tipo
Gostei + 0
05/02/2004
Henry.fartura
eu não conheço nada sobre os udf do ronaldo por isso não te falo se é mais fácil ou dificil...
até +,
henrique
Gostei + 0
06/02/2004
Wbb
henry.fartura, até pensei em usa StringGrid, porém não seria viável devido à quantidade de dados que teria que inserir. Iria ficar lento.
Por fim, acabei de resolver o problema de forma diferente das duas acima. Criei uma ´Consulta´ no próprio Access, depois fiz uma ´Referência Cruzada´ e aí sim fiz a leitura dos dados via Delphi...
Obrigado pelas dicas.
Até mais.
wbb
Gostei + 0
06/02/2004
Henry.fartura
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)