Como fazer esta sql

05/02/2006

Boa tarde a todos.

Para fazer uma consulta de todos os clientes que compraram na minha empresa eu faço a seguinte instrução sql:
Select nome_cliente from clientes where exists(select * from vendas where vendas.codigo_cliente = clientes.codigo);
Até ai esta tudo bem o problema é que eu presciso fazer uma consulta que saia todos os clientes cadastrados e se o clientes tiver feito uma compra o sistema marca ele com um asterisco(*). Como fazer isto em sql.

Eu uso Delphi 7, dbExpress, Interbase e Fortes Report....

Desde já muito obrigado pela ajuda...

Luciano Ramos


Luciano.sul

Respostas

06/02/2006

Thomaz_prg

Amigo no Firebird daria pra ser asim:

Select 
Case
  when exists(select * from vendas where vendas.codigo_cliente = clientes.codigo) then ´*´
  else ´ ´
end as Comprou, nome_cliente from clientes; 


Dessa forma, você teria um campo que mostraria se o cliente comprou ou não.


Responder Citar

06/02/2006

Luciano.sul

Obrigado Thomaz_prg pela ajuda vou testar em casa a noite... :D


Responder Citar

07/02/2006

Luciano.sul

Estranho se eu fizer esta operacao no IBConsole funciona e se eu fizer na query funciona mas se eu fizer em tempo de execução dentro do meu sistema nao funciona, da este erro na hora de compilar. Exemplo:

SQLQuery1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(´Select Case when exists(select * from´);
SQLQuery1.SQL.Add(´ vendas here vendas.codigo_cliente´);
SQLQuery1.SQL.Add(´ = clientes.codigo) then ´*´ else ´ ´ ´);
SQLQuery1.SQL.Add(´ end as Comprou, nome_cliente from clientes´);
SQLQuery1.Open;

O Delphi me da o seguinte erro.
[Error] Unit1.pas(37): Operator not applicable to this operand type

Oque pode ser???? :oops:

Desde ja muito obrigado...


Responder Citar

08/02/2006

Thomaz_prg

Tenta assim:

SQLQuery1.Close; 
SQLQuery1.SQL.Clear; 
SQLQuery1.SQL.Add(´Select´);
SQLQuery1.SQL.Add(´  Case 
SQLQuery1.SQL.Add(´    when exists(select * from vendas
SQLQuery1.SQL.Add(´    where vendas.codigo_cliente = clientes.codigo) ´
SQLQuery1.SQL.Add(´    then ´+QuotedStr(´*´)+´ else ´+QuotedStr(´ ´) ); 
SQLQuery1.SQL.Add(´ end as Comprou, nome_cliente from clientes´); 
SQLQuery1.Open; 



Responder Citar

08/02/2006

Luciano.sul

ok vou testar.
Novamente obrigado pela ajuda... :D


Responder Citar