Fórum Duvida com Sql #190330
23/10/2003
0
Olá amigos
Estou usando o ib e tenho uma tabela onde armazenarei as vendas nos seguintes campos: cod, cliente, produto, quantidade, valor, data. A minha duvida é a seguinte, preciso gerar um relatório de produtos vendidos mensal, ou seja, quantidade vendida do produto nos últimos 12 meses e este relatorio vai pegar todos os produtos da tabela colocando as quantidades totais nas colunas meses. Estou utilizando extract do ib para filtrar por mes, mas preciso dos ultimos 12 meses e não apenas do mes atual.
Obrigado desde já
Sanses
Estou usando o ib e tenho uma tabela onde armazenarei as vendas nos seguintes campos: cod, cliente, produto, quantidade, valor, data. A minha duvida é a seguinte, preciso gerar um relatório de produtos vendidos mensal, ou seja, quantidade vendida do produto nos últimos 12 meses e este relatorio vai pegar todos os produtos da tabela colocando as quantidades totais nas colunas meses. Estou utilizando extract do ib para filtrar por mes, mas preciso dos ultimos 12 meses e não apenas do mes atual.
Obrigado desde já
Sanses
Sanses
Curtir tópico
+ 0
Responder
Posts
23/10/2003
Nando
Amigo, não sei se o q vou t dizer é a melhor solução, mas foi a que pensei agora.
Ao invés de utilizar o extract, faça o SQL buscar somente entre o dia 1 de 12 meses anteriores.
faça algo assim: variavel := formatdatetime(´01/MM/yyyy´, incmonth(date, -12));
sua variavel já está com o primeiro dia de doze meses atrás.
agora pegue uma função que tem aki no clube delphi que retorna o último dia do mês, dai você aplica esta função em uma segunda variável e vc terá as datas para fazer a consulta:
SELECT
.
.
.
WHERE SEU_CAMPO >= VARIAVEL1 AND SEU_CAMPO <= VARIAVEL2
isso deve funcionar!
Outra opção é tentar fazer o extract e subtrair 12 pois o retorno do extract é um integer. Mas isso eu não sei se funciona direito, nunca testei.
Qualquer dúvida me fala!
Ao invés de utilizar o extract, faça o SQL buscar somente entre o dia 1 de 12 meses anteriores.
faça algo assim: variavel := formatdatetime(´01/MM/yyyy´, incmonth(date, -12));
sua variavel já está com o primeiro dia de doze meses atrás.
agora pegue uma função que tem aki no clube delphi que retorna o último dia do mês, dai você aplica esta função em uma segunda variável e vc terá as datas para fazer a consulta:
SELECT
.
.
.
WHERE SEU_CAMPO >= VARIAVEL1 AND SEU_CAMPO <= VARIAVEL2
isso deve funcionar!
Outra opção é tentar fazer o extract e subtrair 12 pois o retorno do extract é um integer. Mas isso eu não sei se funciona direito, nunca testei.
Qualquer dúvida me fala!
Responder
Gostei + 0
23/10/2003
Thematrix:reloaded
Ateh onde eu saiba, e ja passei por isso, vc nao tem como no SQL criar um cursor com soma de 12 meses individualizadas.
O caminho mais facil e vc montar uma tabela temporaria no seu Banco de Dados com uma estrutura +/- assim:
CodProduto
Mes1
Mes2
Mes3
...
Mes12
E ai, antes do relatorio vc faz um processo para gravar os totais nesta tabela, por exemplo:
BtnProcesso.Click
With IBQProdutos do
begin
First;
While not EoF do
begn
For i := 1 To 12 do
begin
<< SQL para somar >>
end;
<<Gravar na Tabela >>
Next
end;
end;
e finalmente vc cria o relatorio a partir desta tabela, Ok
O caminho mais facil e vc montar uma tabela temporaria no seu Banco de Dados com uma estrutura +/- assim:
CodProduto
Mes1
Mes2
Mes3
...
Mes12
E ai, antes do relatorio vc faz um processo para gravar os totais nesta tabela, por exemplo:
BtnProcesso.Click
With IBQProdutos do
begin
First;
While not EoF do
begn
For i := 1 To 12 do
begin
<< SQL para somar >>
end;
<<Gravar na Tabela >>
Next
end;
end;
e finalmente vc cria o relatorio a partir desta tabela, Ok
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)