Array
(
)

Como fazer esta sql

Luciano.sul
   - 05 fev 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


Thomaz_prg
   - 06 fev 2006

Amigo no Firebird daria pra ser asim:

#Código


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.


Luciano.sul
   - 06 fev 2006

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


Luciano.sul
   - 07 fev 2006

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...


Thomaz_prg
   - 08 fev 2006

Tenta assim:

#Código


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;



Luciano.sul
   - 08 fev 2006

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