Fórum DBGrid: colunas em tempo de execução (problemático!!!) #211952

05/02/2004

0

Fala galera!
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

Wbb

Responder

Posts

05/02/2004

Ronaldomelo

Caro Colega,

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


Responder

Gostei + 0

05/02/2004

Henry.fartura

na minha opinião você poderia utilizar uma string grid e inserir os dados da query nela as invés de um dbgrid.
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


Responder

Gostei + 0

06/02/2004

Wbb

ronaldomelo, é isso mesmo que você entendeu o que eu preciso mas infelizmente ainda não estou usando Firebird (por falta de conhecimento mesmo). Neste programa estou usando Access (só um pouquinho inferior.. :D). Obrigado pela ajuda, mas neste caso esta dica não vai servir. Se bem que sua sugestão me deu algumas idéias que irei experimentar.

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


Responder

Gostei + 0

06/02/2004

Henry.fartura

wbb.... é isso aí mesmo, as vezes eu tb tenho um problema, penso em várias soluções, e por fim acabo utilizando uma que talvez nem tenha pensado.... sabe aquele ´estalo´ que da só qdo a gente não tá pensando em nada... hehehee


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar