if em um select, é possivel ?
Tenho um determinado campo no banco de dados que está gravado, 1,2,3 ou 4 onde 1-solteiro, 2-casado, 3-viuvo, 4-outros.
É possivel em meu select no lugar de trazer o numero trazer o texto, tipo em vez de trazer 2 trazer casado.
É possivel em meu select no lugar de trazer o numero trazer o texto, tipo em vez de trazer 2 trazer casado.
Weber
Curtidas 0
Respostas
Rafael Heise
16/09/2003
Bom colega... se o banco de dados permitir, é possível colocar if no SQL sim.. mas isso em determinados banco, e se não estou enganado é o ORACLE e SQLServer que permitem IF no SQL, mas não tenho certeza.
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
e no seu SQL você usa as duas tabelas identificando cada registro equivalente no WHERE, fazendo mais o menos assim
beleza ?
é uma idéia....
Ou você pode usar ainda um UNION mas acho que ficaria bem mais lento
da seguinte forma...
... pois o UNION é como um IF....
abraços...
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
Btovix
16/09/2003
Olá..
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
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
Jaimeprocopio
16/09/2003
É possível sim, só que ao invés de IF você usa WHEN,
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´ ´);
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