Fórum Consulta Anual #223905
01/04/2004
0
1º Exemplo: Ano 2003
Teria como resultado
Jan Fev Mar Abril ..... Nov Dez
12,32 250,21 120,01 0,01 1,01 52,01
2º Exemplo Ano 2004
Teria como resultado
Jan Fev Mar Abril ..... Nov Dez
2,30 50,20 120,01 0,01 0,00 0,00
Desde já agradeço :wink:
Silvio
Curtir tópico
+ 0Posts
01/04/2004
Marco Salles
procedure PesquisarSomentePeloAno(Ano:Word); var DataInicial:TDate; DataFinal:TDate; begin DataInicial:=EncodeDate(Ano,01,01); DataFinal:=EncodeDate(Ano,12,31); Form1.Query1.close; Form1.Query1.sql.Clear; Form1.Query1.sql.Add(´Select *From "TB VENDAS´); Form1.Query1.sql.Add(´Where Data>=:DataMovInicial´); Form1.Query1.ParamByName(´DataMovInicial´).AsDateTime:=DataInicial; Form1.Query1.sql.Add(´and Data<=:DataMovFinal´); Form1.Query1.ParamByName(´DataMovFinal´).AsDateTime:=DataFinal; Form1.Query1.Prepare; Form1.Query1.Open; end;
[b:691f158cbe]Obs: E Necessário Ter Um Campo Data Na Sua Tabela[/b:691f158cbe]
Gostei + 0
02/04/2004
Silvio
Eu fiz como vc me passou:
procedure TFrmGrfVendasAnual.ConsultaAno(ano: Word);
var
DataInicial : TDate;
DataFinal : TDate;
begin
DataInicial := EncodeDate(Ano, 01,01);
DataFinal := EncodeDate(Ano, 12,31);
QryVendasAnual.Close;
QryVendasAnual.Sql.Clear;
QryVendasAnual.SQl.Add(´Select Pedidos.DataPed, Sum((Itens.Quantidade * Itens.Preco) - Pedidos.Desconto) as Total from Pedidos, Itens´);
QryVendasAnual.Sql.Add(´Where (DataPed >= :DataMovinicial) and (Pedidos.Numero = Itens.NroPed)´);
QryVendasAnual.ParamByName(´DataMovInicial´).asdateTime := DataInicial;
QryVendasAnual.Sql.add(´and dataPed <= :DataMovFinal´);
QryVendasAnual.ParamByName(´DataMovFinal´).asDateTime := DataFinal;
QryVendasAnual.SQL.Add(´Group by Pedidos.DataPed´);
QryVendasAnual.Prepare;
QryVendasAnual.Open;
end;
Mas desta forma ele me mostra soma por dia do mes como faço para que me mostre a soma por mês sei que esta quase lá, só mais este empurrãozinho :lol:
Gostei + 0
02/04/2004
Silvio
Gostei + 0
02/04/2004
Silvio
se alguem souber por favor me passe
Valeu a todos
Gostei + 0
02/04/2004
Silvio
Gostei + 0
02/04/2004
Silvio
Gostei + 0
02/04/2004
Aroldo Zanela
Colega,
O que você passa no select independe da linguagem do front-end e sim do back-end (no seu caso o SQL Server). No caso de extrair o mês no Delphi seria MonthOf( <Data> ). Incluir DateUtils na lista de uses.
Gostei + 0
02/04/2004
Marco Salles
Gostei + 0
02/04/2004
Aroldo Zanela
Neste caso ele realmente pode utilizar a técnica de agrupamento por mês (Month) com base num campo data, bem como, utilizando um servidor de banco de dados como o SQL Server, também poderia utilizar o recurso de View e fazer a consulta sobre a mesma, aumentando assim, significativamente a performance da recuperação das informações.
Colega, coloque a DDL da tabela (estrutura) para que possamos analisar a forma mais otimizada.
Gostei + 0
03/04/2004
Silvio
Codigo : Tipo Inteiro
NF : Inteiro
Cliente : Inteiro
Vendedor : Inteiro
Data : Tipo Date
Desconto : Tipo Float
e como todos sabem uma tabela vendas possui itens e a minha de ItensVenda possui:
CodigoVenda : Tipo Intiero
CodProduto : Inteiro
Quantidade : Inteiro
Preco : Tipo Float
Desde já agradeço pela força
Gostei + 0
03/04/2004
Aroldo Zanela
Tenta este código aqui:
procedure TFrmGrfVendasAnual.ConsultaAno(Ano: Word); var DataInicial: TDate; DataFinal: TDate; begin DataInicial := EncodeDate(Ano, 01,01); DataFinal := EncodeDate(Ano, 12,31); With QryVendasAnual do begin Close; Clear; SQl.Add(´Select MONTH(Pedidos.DataPed) as Mes, Sum((Itens.Quantidade * Itens.Preco) - Pedidos.Desconto) as Total´); SQL.Add(´from Pedidos INNER JOIN Itens´); SQL.Add(´ON pedidos.numero = Itens.NroPed´); SQL.Add(´Where (DataPed BETWEEN :DataMovinicial and :DataMovFinal´); SQL.Add(´Group by MONTH(Pedidos.DataPed)´); ParamByName(´DataMovFinal´).AsDate := DataFinal; ParamByName(´DataMovInicial´).AsDate := DataInicial; Prepare; Open; end; end;
Se não funcionar desta forma, é só criar uma View fazendo select e converter a data para mes e escrever um novo select sobre a mesma que vai funcionar corretamente.
Gostei + 0
03/04/2004
Silvio
...Valeu Aroldo pela força, já estou pesquisando na Internet alguns tutoriais sobre View, para fazer a implementação no codigo é q não me recordo como fazer. :cry:
Valeu :cry:
Gostei + 0
03/04/2004
Vanius
Sum(ValorVenda)
FROM Vendas
WHERE DataVenda BETWEEN :DataInicial AND :DataFinal
GROUP BY Str(MONTH(DataVenda), 2)+´/´+Str(YEAR(DataVenda), 4)
Gostei + 0
03/04/2004
Aroldo Zanela
Vai no Enterprise Manager na seção de Views do banco, botão direito, Create View (Salve como nome: VendaMensal):
Select Year(Pedidos.DataPed) As Ano, Month(Pedidos.DataPed) As Mes, Sum((Itens.Quantidade * Itens.Preco) - Pedidos.Desconto) as Total from Pedidos INNER JOIN Itens ON pedidos.numero = Itens.NroPed Group by Year(Pedidos.DataPed), Month(Pedidos.DataPed)
No Delphi, mude o seguinte:
procedure TFrmGrfVendasAnual.ConsultaAno(Ano: Word); begin With QryVendasAnual do begin Close; Clear; SQl.Add(´Select Ano, Mes, Total´); SQL.Add(´from VendaMensal´); SQL.Add(´Where (Ano = :Ano) and´); SQL.Add(´(Mes >= 1 and Mes <= 12)´); ParamByName(´Ano´).AsInteger := Ano; Prepare; Open; end; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)