Ir para conteúdo
Fórum Script Brasil
  • 0

Comando Sql


Diabloline

Pergunta

Quero fazer um relatorio da seguinte maneira, vou explicar como funciona hoje.

1 Tabela de Movimentação

Todo registro de entrada e saída vai pra ela, com codigo, descricao, data, tipo, grupo, quantidade. Num determinado periodo(20/12/04 a 25/12/04).

Ex:

Codigo Descrição Grupo Quantidade Tipo Data

102 Parafuso Metais 20 E 20/12/04

504 Caneta Escritorio 82 E 21/12/04

102 Parafuso Metais 20 E 22/12/04

504 Caneta Escritorio 05 S 22/12/04

102 Parafuso Metais 50 S 23/12/04

102 Parafuso Metais 100 E 24/12/04

504 Caneta Escritorio 01 S 25/12/04

102 Parafuso Metais 25 S 25/12/04

504 Caneta Escritorio 20 E 25/12/04

Assim sai no relatorio que tenho hoje.

O que pretendo!

que saia da seguinte maneira:

Caso: Vou determinar o periodo só que ao invés de sair separado ele tem que unir as quantidades e ficaria assim.

Codigo Descrição Grupo Quantidade Tipo Data

504 Caneta Escritorio 102 E 20/12/04 25/12/04

504 Caneta Escritorio 06 S 20/12/04 25/12/04

102 Parafuso Metais 140 E 20/12/04 25/12/04

102 Parafuso Metais 75 S 20/12/04 25/12/04

Como fazer para ele unir os mesmos itens dessa maneira.

Link para o comentário
Compartilhar em outros sites

22 respostass a esta questão

Posts Recomendados

  • 0

Olá,

É tipo assim:

Query1.Close;

Query1.Sql.Clear;

Query1.Sql.Add('Select Codigo, Descricao, Grupo, Sum(Quantidade)Quantidade, Tipo');

Query1.Sql.Add('From Tabela');

Query1.Sql.Add('Where Data Beetwen :dataini and :datafim');

Query1.Sql.Add('Group By Codigo, Descricao, Grupo, Tipo');

Query1.ParamByName('dataini').AsDate := StrToDateTime(MaskEdit1.text);

Query1.ParamByName('datafim').AsDate := StrToDateTime(MaskEdit2.text);

Query1.Open;

Obs: Só não da pra colocar a data da forma como você quer (20/12/04 25/12/04) na select, mas não há necesidade disso, num relatório você poderia usar um QRLabel pra trazer esse periodo do form onde você ta informando essa data.

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

dados.QueryMovimentacao.Close;

dados.QueryMovimentacao.SQL.Clear;

dados.QueryMovimentacao.SQL.Add('SELECT *');

dados.QueryMovimentacao.SQL.Add('FROM Movimentacao');

dados.QueryMovimentacao.SQL.Add('WHERE Mov_Data>=:pInicial and Mov_Data<=:pFinal');

dados.QueryMovimentacao.SQL.Add('GROUP BY Mov_Descricao');

dados.QueryMovimentacao.SQL.Add('ORDER BY Mov_Descricao');

dados.QueryMovimentacao.ParamByName('pInicial').AsDateTime := StrToDate(Inicial);

dados.QueryMovimentacao.ParamByName('pFinal').AsDateTime := StrToDate(Final);

dados.QueryMovimentacao.Open;

Link para o comentário
Compartilhar em outros sites

  • 0

Olá,

nesse caso, pra usar o GROUP BY, você tera que especificar os campos da tabela na select em vez de usar o asteristico (Select * ...)

tipo assim:

Query1.Sql.Add('Select Codigo, Descricao, Grupo, Sum(Quantidade)Quantidade, Tipo');

Quais são os campos de você quer mostrar no relatório?

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

dados.QueryMovimentacao.SQL.Add('SELECT Mov_Descricao, Mov_Registro, Sum(Mov_Quantidade)Mov_Quantidade, Mov_Grupo, Mov_Tipo, Mov_Cliente, Mov_Data');

dados.QueryMovimentacao.SQL.Add('FROM Movimentacao');

dados.QueryMovimentacao.SQL.Add('WHERE Mov_Data>=:pInicial and Mov_Data<=:pFinal');

dados.QueryMovimentacao.SQL.Add('GROUP BY Mov_Descricao');

dados.QueryMovimentacao.SQL.Add('ORDER BY Mov_Descricao');

Eu já havia feito isso só que está dando o mesmo erro, será que algo que tenho que determinar para o TQuery ou na Tabela?

Link para o comentário
Compartilhar em outros sites

  • 0

Olá,

nesse caso você tera que agrupar todos os campos exceto o campo 'quantidade', tipo assim: GROUP BY Mov_Descricao, Mov_Registro, Mov_Grupo, Mov_Tipo, Mov_Cliente, Mov_Data

Obs: pra sua select da certo, esses campos agrupados devem ter resultados iguais, caso contrario o resultado de sua select pode não ser o resultado esperado.

Abs. Progr'amador

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, desculpe a demora!

O fato de que Mov_Registro, num quer dizer que seja necessário estar na Select, dependendo da situação, então ver se isso serve pra vc, acho que você esquecei a Mov_quantodade... smile.gif

Ae vai:

With dados.QueryMovimentacao do begin

Close;

Sql.Clear;

Sql.Add('SELECT Mov_Descricao, Mov_Grupo, Mov_Tipo, Mov_Data, Sum(Mov_Quantidade)Mov_Quantidade');

Sql.Add('FROM Movimentacao');

Sql.Add('WHERE Mov_Data Between :pInicial and :pFinal');

dados.QueryMovimentacao.SQL.Add('GROUP BY Mov_Descricao, Mov_Grupo, Mov_Tipo, Mov_Data');

dados.QueryMovimentacao.SQL.Add('ORDER BY Mov_Descricao');

etc,

etc...

End;

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

procedure TFormMovDescricao.BitBtn1Click(Sender: TObject);

var

Inicial,Final:String;

begin

Inicial := MaskEdit1.Text;

Final := MaskEdit2.Text;

With dados.QueryMovimentacao do begin

close;

sql.Clear;

Mov_Registro, Sum(Mov_Quantidade)Mov_Quantidade, Mov_Grupo, Mov_Tipo, Mov_Cliente, Mov_Data FROM Movimentacao WHERE Mov_Data>=:pInicial and Mov_Data<=:pFinal GROUP BY Mov_Descricao, Mov_Grupo, Mov_Tipo ORDER BY Mov_Descricao';

SQL.Add('SELECT Mov_Descricao,Mov_Tipo, Sum(Mov_Quantidade)Mov_Quantidade,Mov_Grupo, Mov_Data');

SQL.Add('FROM Movimentacao');

SQL.Add('WHERE Mov_Data>=:pInicial and Mov_Data<=:pFinal');

dados.QueryMovimentacao.SQL.Add('GROUP BY Mov_Descricao, Mov_Grupo, Mov_Tipo');

dados.QueryMovimentacao.SQL.Add('ORDER BY Mov_Descricao');

dados.QueryMovimentacao.ParamByName('pInicial').AsDateTime := StrToDate(Inicial);

dados.QueryMovimentacao.ParamByName('pFinal').AsDateTime := StrToDate(Final);

dados.QueryMovimentacao.Prepare;

FormRelMovimentacao := TFormRelMovimentacao.Create(Self);

FormRelMovimentacao.rptRel.Preview;

end;

end;

Pode ser que tenha algum erro na geração do formulario mas acdreditt que não.

Se tiver como me enviar um exemplo funcionado.

diabloline@bol.com.br

desde já agradeço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá,

Tem varios erros ae!

Tenta assim:

procedure TFormMovDescricao.BitBtn1Click(Sender: TObject);

var

Inicial,Final:String;

begin

Inicial := MaskEdit1.Text;

Final := MaskEdit2.Text;

FormRelMovimentacao := TFormRelMovimentacao.Create(Self);

With dados.QueryMovimentacao do begin

close;

sql.Clear;

SQL.Add('SELECT Mov_Descricao,Mov_Tipo, Sum(Mov_Quantidade)Mov_Quantidade,Mov_Grupo, Mov_Data');

SQL.Add('FROM Movimentacao');

SQL.Add('WHERE Mov_Data>=:pInicial and Mov_Data<=:pFinal');

dados.QueryMovimentacao.SQL.Add('GROUP BY Mov_Descricao,Mov_Tipo, Mov_Grupo, Mov_Data');

dados.QueryMovimentacao.SQL.Add('ORDER BY Mov_Descricao');

dados.QueryMovimentacao.ParamByName('pInicial').AsDate := StrToDate(Inicial);

dados.QueryMovimentacao.ParamByName('pFinal').AsDate := StrToDate(Final);

dados.QueryMovimentacao.Open;

FormRelMovimentacao.rptRel.Preview;

end;

end;

-------------------

Se ocorrer algum erro, posta ae o erro tambem, Ok! wink.gif

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...