ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Sql, quase dando certo...

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
jorge.vaz
Membro Junior
Membro Junior


Registrado: Sábado, 17 de Dezembro de 2005
Mensagens: 300

MensagemEnviada: Qui Jan 11, 2007 11:15 pm    Assunto: Sql, quase dando certo... Responder com Citação

Citação:

Tópico editado por Sufolk.
Motivo: Respeitar a divisão do fórum. Regras do Fórum.


Pessoal, estou precisando fazer uma consulta em um programa de um cliente meu, onde irá somar a quantidade de cada produto, em um determinado periodo, eu consegui fazer assim:


Query1.SQL.Add('select codpro, descricao, preco, sum(PELES) as peles, sum(M2) as m2 from PRODNOTA where codpro=codpro group by codpro, descricao, preco');


Desta forma funcionou corretamente, mas ele pega todos os registros do BD. Então eu inseri 2 datetimepicker(eita nome grandi, hehehe), onde o cliente ira selecionar o periodo da consulta, então tentei assim:

Query1.SQL.Add('select codpro, descricao, preco, sum(PELES) as peles, sum(M2) as m2 from PRODNOTA where datfat between :inicio and :fim and codpro=codpro group by codpro, descricao, preco');
Query1.ParamByName('inicio').AsDate:=DateTimePicker1.Date;
Query1.ParamByName('fim').AsDate:=DateTimePicker2.Date;


Mas desta forma não da muito certo, alguns registros somam, outros não, alguem poderia me dar uma dica? Estou precisando bastante, espero que alguem me ajude. Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rafworld
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 24 de Agosto de 2005
Mensagens: 224

MensagemEnviada: Sex Jan 12, 2007 7:29 am    Assunto: Re: Sql, quase dando certo... Responder com Citação

Olá, se alguns registros não apareceram quer dizer que a data de alguns não estão entre as que você definiu no filtro.

qualquer coisa posta ae...

t++[/url]
_________________
Rafael A Santos
Programador Delphi
MSN: rafworld@hotmail.com
D3 - D5 - D7 - D2006 (Interbase, FireBird, SQL Server)
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
jorge.vaz
Membro Junior
Membro Junior


Registrado: Sábado, 17 de Dezembro de 2005
Mensagens: 300

MensagemEnviada: Sex Jan 12, 2007 7:56 am    Assunto: . Responder com Citação

Não, quanto a data dai ele filtra cerretamente, mas acontece assim, tem 2 registros com o mesmo CODPRO, onde ele teria q somar, mas dai não soma,aparecem 2 vezes, por exemplo assim:



CODPRO------PELES
9---------------17
11--------------2
11--------------1
8----------------5
13---------------12


Alguns ele agrupa e soma a quantidade de peles, outros ele mostra separado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jorge.vaz
Membro Junior
Membro Junior


Registrado: Sábado, 17 de Dezembro de 2005
Mensagens: 300

MensagemEnviada: Seg Jan 15, 2007 10:12 am    Assunto: . Responder com Citação

ninguem sabe como fazer isso ai pessoal? acho que não falta muito, só algum detalhe. Me ajudem. Vlw
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Jan 15, 2007 10:26 am    Assunto: Re: . Responder com Citação

jorge.vaz escreveu:
Não, quanto a data dai ele filtra cerretamente, mas acontece assim, tem 2 registros com o mesmo CODPRO, onde ele teria q somar, mas dai não soma,aparecem 2 vezes, por exemplo assim:



CODPRO------PELES
9---------------17
11--------------2
11--------------1
8----------------5
13---------------12


Alguns ele agrupa e soma a quantidade de peles, outros ele mostra separado.
Olah amigo, eh somente esses dois campos que vc deseja no relatorio? Olah amigo esse campo preço tambem tem que estar na tabela, ou ele eh um campo sum? Se tive um campo # diferente entre estes campos na tabela NAO agrupa mesmo
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
LeandroAoa
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 31 de Dezembro de 2004
Mensagens: 130

MensagemEnviada: Seg Jan 15, 2007 11:46 am    Assunto: Responder com Citação

que banco de dados esta utilizando

eu utilizo mysql

tenta assim

Query1.SQL.Add('select codpro, descricao, preco, sum(PELES) as peles, sum(M2) as m2 from PRODNOTA where datfat between :inicio and :fim and codpro=codpro group by codpro having descricao, preco');
Query1.ParamByName('inicio').AsDate:=DateTimePicker1.Date;
Query1.ParamByName('fim').AsDate:=DateTimePicker2.Date;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jorge.vaz
Membro Junior
Membro Junior


Registrado: Sábado, 17 de Dezembro de 2005
Mensagens: 300

MensagemEnviada: Seg Jan 15, 2007 5:39 pm    Assunto: ok Responder com Citação

Na verdade eu preciso fazer o seguinte: Filtrar entre as datas indicadas, e somar o campo M2 e o campo PELES, quando o campo CODPRO for igual. Então vamos dizer que eu tenha dentro da consulta entre datas 2 registros


CODPRO---DATFAT---M2---PELES---PRECO---DESCRICAO
1------------1/1/2007-2,28--2--------44,00-----Couro
1------------2/1/2007-6,89--5--------44,00-----Couro



Neste caso, supondo que minha pesquisa fosse entre as datas: 01/01/2007 e 10/01/2007, ele deveria somar estes dois registros, pois se tratam do mesmo artigo. É esta a busca que preciso fazer. Obrigado desde ja pelas dicas. Espero que alguem me ajude a construir esta SQL.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
LeandroAoa
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 31 de Dezembro de 2004
Mensagens: 130

MensagemEnviada: Seg Jan 15, 2007 5:56 pm    Assunto: Responder com Citação

sem saber o banco de dados fica meio dificil mas tenta assim

Query1.SQL.Add('select codpro, descricao, preco, sum(PELES) as peles, sum(M2) as m2 from PRODNOTA where datfat between :inicio and :fim group by codpro having descricao, preco');
Query1.ParamByName('inicio').AsDate:=DateTimePicker1.Date;
Query1.ParamByName('fim').AsDate:=DateTimePicker2.Date;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jorge.vaz
Membro Junior
Membro Junior


Registrado: Sábado, 17 de Dezembro de 2005
Mensagens: 300

MensagemEnviada: Seg Jan 15, 2007 6:11 pm    Assunto: Desculpe Responder com Citação

Ola Leandro, desculpe, esqueci de mencionar o BD, estou usando paradox rrsrsrs. Eu tentei fazer desta maneira, mas da o seguinte erro:

INVALID USE OF KEYWORLD.
TOKEN: ,
LINE NUMBER: 1.

Será o que pode ser?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
LeandroAoa
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 31 de Dezembro de 2004
Mensagens: 130

MensagemEnviada: Ter Jan 16, 2007 9:18 am    Assunto: Responder com Citação

ola não conheco paradox mas pelo erro ele não aceita a clausula having
então você vai ter que fazer por teste

tire os campos descricao e preco e deixe somente o codpro

Query1.SQL.Add('select codpro, sum(PELES) as peles, sum(M2) as m2 from PRODNOTA where datfat between :inicio and :fim group by codpro');
Query1.ParamByName('inicio').AsDate:=DateTimePicker1.Date;
Query1.ParamByName('fim').AsDate:=DateTimePicker2.Date;

vai fazendo os teste e vendo o resultado depois acrescente os outros campos pois desta forma ele ira somar agrupado pelo codigo então dos os que contenham o cod 1 sera somado junto no periodo informando
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jorge.vaz
Membro Junior
Membro Junior


Registrado: Sábado, 17 de Dezembro de 2005
Mensagens: 300

MensagemEnviada: Qui Jan 18, 2007 11:39 am    Assunto: quase Responder com Citação

Galera, percebi que o codigo que vou postar novamente abaixo esta funcionando, notei que o problema existente é o seguinte:

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select codpro, descricao, preco, sum(PELES) as peles, sum(M2) as m2 from PRODNOTA where datfat between :inicio and :fim and codpro=codpro group by codpro, descricao, preco');
Query1.ParamByName('inicio').AsDate:=DateTimePicker1.Date;
Query1.ParamByName('fim').AsDate:=DateTimePicker2.Date;
Query1.Open;


Este é o código, e segundo o que eu preciso, é que ele filtre entre as datas indicadas, e que somem os que tiverem mesmo CODPRO. O que está dando errado é o fato de em algum momento o cliente faturar algum produto com preço diferente. Neste caso ele identifica como sendo 2 produtos diferentes, mesmo não sendo, tem solução?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jorge.vaz
Membro Junior
Membro Junior


Registrado: Sábado, 17 de Dezembro de 2005
Mensagens: 300

MensagemEnviada: Qui Jan 18, 2007 11:39 am    Assunto: quase Responder com Citação

Galera, percebi que o codigo que vou postar novamente abaixo esta funcionando, notei que o problema existente é o seguinte:

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select codpro, descricao, preco, sum(PELES) as peles, sum(M2) as m2 from PRODNOTA where datfat between :inicio and :fim and codpro=codpro group by codpro, descricao, preco');
Query1.ParamByName('inicio').AsDate:=DateTimePicker1.Date;
Query1.ParamByName('fim').AsDate:=DateTimePicker2.Date;
Query1.Open;


Este é o código, e segundo o que eu preciso, é que ele filtre entre as datas indicadas, e que somem os que tiverem mesmo CODPRO. O que está dando errado é o fato de em algum momento o cliente faturar algum produto com preço diferente. Neste caso ele identifica como sendo 2 produtos diferentes, mesmo não sendo, tem solução?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Sex Jan 19, 2007 3:49 pm    Assunto: Responder com Citação

tem solução e é simples:



SELECT CODPRO, MAX(DESCRICAO),
SUM(PELES) AS PELES,
SUM(M2) AS M2
FROM PRODNOTA
WHERE DATFAT BETWEEN :inicio AND :fim
GROUP BY CODPRO


mas vamos supor q vc precisa do preco

nao sei o q era esse PELES nem esse M2 mas suponho q seriam multiplicados pelo preco

SELECT CODPRO, MAX(DESCRICAO),
SUM(PELES) AS PELES,
SUM(M2) AS M2,
SUM(PELES * preco) AS TOT_PELES,
SUM(M2 * PRECO) AS TOT_M2,
FROM PRODNOTA
WHERE DATFAT BETWEEN :inicio AND :fim
GROUP BY CODPRO


qq coisa me contacte pelo msn gilsonnr@hotmail.com
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB