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

Sql - Distinct


Vivendo&Aprendendo

Pergunta

Preciso diferenciar dois registros com o mesmo código e mostar um deles mas está dando erro na minha consulta. Onde esta errado?

    DmDados.ContasReceber.Close;
    DmDados.ContasReceber.SQL.Clear;
    DmDados.ContasReceber.SQL.Add('Select Distinct(ContasReceber.CodSaidas), ContasReceber.Codigo,');
    DmDados.ContasReceber.SQL.Add('ContasReceber.DataCad, ContasReceber.Cliente, ContasReceber.MeuCodigo,');
    DmDados.ContasReceber.SQL.Add('ContasReceber.Cnpj, ContasReceber.Ie, ContasReceber.Cpf, ContasReceber.Rg,');
    DmDados.ContasReceber.SQL.Add('ContasReceber.Orgao, ContasReceber.Endereco, ContasReceber.Numero,');
    DmDados.ContasReceber.SQL.Add('ContasReceber.Bairro, ContasReceber.FormaPgto, ContasReceber.TipoPgto,');
    DmDados.ContasReceber.SQL.Add('ContasReceber.DataVencimento, ContasReceber.Parcela, ContasReceber.Valor,');
    DmDados.ContasReceber.SQL.Add('ContasReceber.Desconto, ContasReceber.ValorRecebido, ContasReceber.Troco, ContasReceber.ValorTotal, ContasReceber.Situacao, ContasReceber.Promissoria, ContasReceber.Descricao');
    DmDados.ContasReceber.SQL.Add('Where ContasReceber.CodSaidas = '+IntToStr(Cod));
    DmDados.ContasReceber.Open;

Alexandre

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Vivendo&Aprendendo, está faltando a cláusula FROM.

A título de sugestão, seria mais conveniente você fazer uso do WITH <DM> DO e utilizar ALIAS no SQL, fica mais claro de ler o código:

with DmDados do
begin
  ContasReceber.SQL.Add('Select Distinct(C.CodSaidas), C.Codigo,');
  ContasReceber.SQL.Add('C.DataCad, C.Cliente, C.MeuCodigo,');
  ContasReceber.SQL.Add('C.Cnpj, C.Ie, C.Cpf, C.Rg,');
  ContasReceber.SQL.Add('C.Orgao, C.Endereco, C.Numero,');
  ContasReceber.SQL.Add('C.Bairro, C.FormaPgto, C.TipoPgto,');
  ContasReceber.SQL.Add('C.DataVencimento, C.Parcela, C.Valor,');
  ContasReceber.SQL.Add('C.Desconto, C.ValorRecebido, C.Troco, C.ValorTotal, C.Situacao, C.Promissoria, C.Descricao');
  ContasReceber.SQL.Add('FROM ContasReceber C');   *** <==== AQUI
  ContasReceber.SQL.Add('Where C.CodSaidas = '+IntToStr(Cod));

  ContasReceber.Open;
end;
...

No seu caso, inclusive, que tem apenas uma tabela, não seria necessário o uso do alias. Apenas o nome dos campos da tabela definida na cláusula FROM.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Alexandre,

1º - está faltando a clausula FROM NomeDaTabela (From ContasReceber) antes da clausula WHERE;

2º - No caso de select com 1 (uma) tabela, não necessita informar o nome da tabela antes dos campos (ContasReceber.CodSaidas) ;

----

Vê se assim resolve o seu caso:

  with DmDados.ContasReceber do begin
    Close;
    SQL.Clear;
    SQL.Add('Select Distinct CodSaidas, Codigo, DataCad, Cliente, MeuCodigo,');
    SQL.Add('Cnpj, Ie, Cpf, Rg,Orgao, Endereco, Numero,Bairro, FormaPgto, TipoPgto,');
    SQL.Add('DataVencimento, Parcela, Valor,Desconto, ValorRecebido, Troco, ValorTotal,');
    SQL.Add('Situacao, Promissoria, Descricao');
    SQL.Add('From ContasReceber Where CodSaidas = '+''''+IntToStr(Cod)+''''+'');
    Open;
  end;

Abs. Progr'amador.

----------------------Editado-------------------------------------

Puts!, foi mal Micheus, :huh:

não vi seu post!

você postou enquando eu tava digitando :D

Editado por Progr'amador
Link para o comentário
Compartilhar em outros sites

  • 0

Olá Programador e Micheus em questão da clausula From eu só não coloquei aqui no Forum, e usei o que vocês me passaram mas continua do mesmo jeito, ou seja, se eu tenho dois registros com o mesmo código ele esta abrindo os dois no lugar de abrir apenas um, parece que ele não usa o distinct.

O que pode ser amigos?

Alexandre

Link para o comentário
Compartilhar em outros sites

  • 0

A questão é que deve haver um campo (coluna) na sua consulta com valor diferente.

O distinct vai, digamos, "agrupar" o resultado retornando apenas a 1ª ocorrência de dos valores repetidos (avaliando todas as colunas). Assim, se houver uma coluna diferente numa outra linha do resultado, esta será retornada já que é diferente da anterior.

Se eu não estou enganado, talvez você tenha que modificar sua abordagem.

Dá uma olhada neste link na parte que fala do DISTINCT

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu Micheus e Programador

Realmente tinha uma outra coluna com valor diferente.

Ficou da seguinte maneira agora e funcionou:

    with ADOVia do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Select Distinct CodSaidas, Codigo, DataCad, Cliente, MeuCodigo,');
      SQL.Add('Cnpj, Ie, Cpf, Rg,Orgao, Endereco, Numero,Bairro, FormaPgto, TipoPgto,');
      SQL.Add('DataVencimento, Parcela, Valor,Desconto, ValorRecebido, Troco, ValorTotal,');
      SQL.Add('Situacao, Promissoria, Descricao');
      SQL.Add('From ContasReceber Where (Parcela = 1) and CodSaidas = '+IntToStr(Cod));
      Open;
    end;

Alexandre

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...