Fórum if em um select, é possivel ? #182406
16/09/2003
0
É possivel em meu select no lugar de trazer o numero trazer o texto, tipo em vez de trazer 2 trazer casado.
Weber
Curtir tópico
+ 0Posts
16/09/2003
Rafael Heise
Então, existe uma outra maneira de fazer isso...
Crie uma tabela auxiliar digamos assim, que tem um código identificador e um código que será equivalente ao que você quer... e use os dois como chave da tabela.. .
então, sua tabela auxiliar seria mais ou menos assim
COD - IDENT - TEXTO 1 - 1 - Solteiro 1 - 2 - Casado 1 - 3 - Viúvo 1 - 4 - Outros
e no seu SQL você usa as duas tabelas identificando cada registro equivalente no WHERE, fazendo mais o menos assim
SELECT *, AUX.TEXTO FROM TABELA,AUXILIAR AUX WHERE AUX.COD = 1 AND AUX.IDENT = TABELA.CAMPO AND [restante do where]
beleza ?
é uma idéia....
Ou você pode usar ainda um UNION mas acho que ficaria bem mais lento
da seguinte forma...
SELECT *, ´Solteiro´ AS ESTCIV FROM TABELA WHERE CAMPO = 1 UNION SELECT *,´Casado´ AS ESTCIV FROM TABELA WHERE CAMPO = 2 UNION SELECT *,´Viúvo´ AS ESTCIV FROM TABELA WHERE CAMPO = 3 UNION SELECT *,´Outros´ AS ESTCIV FROM TABELA WHERE CAMPO = 4
... pois o UNION é como um IF....
abraços...
Gostei + 0
16/09/2003
Btovix
Muito boa a reposta do colega, mas creio que esta minha também possa te ajudar.
Ao invés de criar uma tabela onde vc insere as situações(solteiro, casado, etc.) Você poderia estar utilizando o evento [b:4813b7683b]OnGetText [/b:4813b7683b] no object inspector no Delphi6(não sei se isso tem em versões anteriores ou posteriores)... para isso vc tem que selecionar o campo da query (em fields editor) que deseja e ir em events, neste evento para começar a programar...
Esse evento faz você enviar uma string qualquer no lugar do campo no banco... Se você não tiver meios de colocar um if em sua consulta sql poderia estar utilizando tb essa solução
O código ficaria assim:
[b:4813b7683b]procedure[/b:4813b7683b] Tdados.qr_situacaocd_situacaoGetText(Sender: TField;
var [b:4813b7683b][i:4813b7683b]Text:[/i:4813b7683b][/b:4813b7683b] String; DisplayText: Boolean);
begin
// use a var text grifada acima para apresentar o texto necessário
if sender.asinteger = 1 then
text:= ´solteiro´;
if sender.asinteger = 2 then
text:= ´casado´;
if sender.asinteger = 3 then
text:= ´Viúvo´;
if sender.asinteger = 4 then
text:= outros
end;
Depois é só passar o campo do banco para o edit(caso esteja usando um)
No evento OnClick(ou qualquer outro evento)
procedure Tfr_login.bt_okClick(Sender: TObject);
begin
// Importante abrir a query antes
dados.qr_situacao.Open;
edit1.text:= dados.qr_situacaocd_situacao.asString
dados.qr_situacao.Close;
end;
Espero que tenha ajudado qualquer coisa me avisa que eu te mando um exemplo melhor :) []´s
Gostei + 0
16/09/2003
Jaimeprocopio
como no exemplo abaixo (para ORACLE):
With QryEmpregado do
begin
Close;
SQL.Clear;
SQL.Add(´SELECT CASE ´);
SQL.ADD(´ WHEN ESTADO_CIVIL = ´´1´´ THEN ´´CASADO ´´ ´);
SQL.Add(´ WHEN ESTADO_CIVL = ´´2´´ THEN ´´SOLTEIRO ´´ ´);
SQL.Add(´ WHEN ESTADO_CIVIL = ´´3´´ THEN ´´DIVORCIADO´´ ´);
SQL.Add(´ END AS ESTADO_CIVIL, ´);
SQL.Add(´ NOME, ENDERECO, BAIRRO..... ´);
SQL.Add(´FROM EMPREGAO ´);
SQL.Add(´WHERE EMPREGADO.DT_ADMISSAO BETWEEN ´10-06-2003´ AND ´10-07-2006´ ´);
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)