 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
jorge.vaz Membro Junior

Registrado: Sábado, 17 de Dezembro de 2005 Mensagens: 300
|
Enviada: Qui Jan 11, 2007 11:15 pm Assunto: Sql, quase dando certo... |
|
|
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 |
|
 |
rafworld Aprendiz

Registrado: Quarta-Feira, 24 de Agosto de 2005 Mensagens: 224
|
Enviada: Sex Jan 12, 2007 7:29 am Assunto: Re: Sql, quase dando certo... |
|
|
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 |
|
 |
jorge.vaz Membro Junior

Registrado: Sábado, 17 de Dezembro de 2005 Mensagens: 300
|
Enviada: Sex Jan 12, 2007 7:56 am Assunto: . |
|
|
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 |
|
 |
jorge.vaz Membro Junior

Registrado: Sábado, 17 de Dezembro de 2005 Mensagens: 300
|
Enviada: Seg Jan 15, 2007 10:12 am Assunto: . |
|
|
ninguem sabe como fazer isso ai pessoal? acho que não falta muito, só algum detalhe. Me ajudem. Vlw |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Jan 15, 2007 10:26 am Assunto: Re: . |
|
|
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 |
|
 |
LeandroAoa Aprendiz

Registrado: Sexta-Feira, 31 de Dezembro de 2004 Mensagens: 130
|
Enviada: Seg Jan 15, 2007 11:46 am Assunto: |
|
|
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 |
|
 |
jorge.vaz Membro Junior

Registrado: Sábado, 17 de Dezembro de 2005 Mensagens: 300
|
Enviada: Seg Jan 15, 2007 5:39 pm Assunto: ok |
|
|
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 |
|
 |
LeandroAoa Aprendiz

Registrado: Sexta-Feira, 31 de Dezembro de 2004 Mensagens: 130
|
Enviada: Seg Jan 15, 2007 5:56 pm Assunto: |
|
|
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 |
|
 |
jorge.vaz Membro Junior

Registrado: Sábado, 17 de Dezembro de 2005 Mensagens: 300
|
Enviada: Seg Jan 15, 2007 6:11 pm Assunto: Desculpe |
|
|
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 |
|
 |
LeandroAoa Aprendiz

Registrado: Sexta-Feira, 31 de Dezembro de 2004 Mensagens: 130
|
Enviada: Ter Jan 16, 2007 9:18 am Assunto: |
|
|
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 |
|
 |
jorge.vaz Membro Junior

Registrado: Sábado, 17 de Dezembro de 2005 Mensagens: 300
|
Enviada: Qui Jan 18, 2007 11:39 am Assunto: quase |
|
|
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 |
|
 |
jorge.vaz Membro Junior

Registrado: Sábado, 17 de Dezembro de 2005 Mensagens: 300
|
Enviada: Qui Jan 18, 2007 11:39 am Assunto: quase |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Sex Jan 19, 2007 3:49 pm Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|