Somar dois campos em função de condição na Select do IB.

Delphi

29/07/2003

Eu consigo fazer uma soma de dois campos na select somente se uma condição for verdadeira?
Ex.
SELECT CAMPO1,CAMPO2,CAMPO3,
//Aqui entraria um IF
if campo1 > 0 then
SUM(CAMPO1,CAMPO2)
else
SUM(CAMPO3,CAMPO3)

FROM TABELA WHERE QUALQUER_CONDICAO

valeu

Estou tentando fazer isso no INTERBASE.


Adriano Santos

Adriano Santos

Curtidas 0

Respostas

Rômulo Barros

Rômulo Barros

29/07/2003

Colega. Com certeza isso pode, porém eu ainda não sei fazer direito, por isso, não vou postar nada aqui, mantendo assim a veracidade da informação. O seu problema está relacionado com HISTÓRIA DE PROCEDURE. A história de procedure nada mais é do que vc criar uma função no próprio banco de dados, utilizando assim o IF, ELSE THEN ...

Procure documentos sobre História de Procedure......


GOSTEI 0
Afarias

Afarias

29/07/2003

Favor, postar as questões sobre Interbase no fórum de INTERBASE.

|Eu consigo fazer uma soma de dois campos na select somente se uma
|condição for verdadeira? Estou tentando fazer isso no INTERBASE.

NÃO. Não existe função tal como a que vc citou no INTERBASE.

Entretanto, vc pode utilizar STORED PROCEDURES para realizar esta operação no INTERBASE.

Só complementando, o FIREBIRD 1.5 possui a função CASE que realiza o q vc quer.


T+


GOSTEI 0
Rômulo Barros

Rômulo Barros

29/07/2003

||NÃO. Não existe função tal como a que vc citou no INTERBASE.

Correto. Foi mal... o certo é procedure.... Mas deu pra entender... :oops: :oops: :oops:


GOSTEI 0
Buosinet

Buosinet

29/07/2003

Dá, sim... Faça o seguinte:

var StrSQL : String;

StrSQL := ´SELECT CAMPO1,CAMPO2,CAMPO3, ´;
if campo1 > 0 then
StrSQL := StrSQL + ´SUM(CAMPO1,CAMPO2) ´
else
StrSQL := StrSQL + ´SUM(CAMPO3,CAMPO3) ´;

with qryConsulta do begin
SQL.Clear;
SQL.Add(StrSQL);
SQL.Add(´FROM TABELA ´);
SQL.Add(´WHERE CONDICAO ´);
SQL.Add(´GROUP BY CAMPO1, CAMPO2, CAMPO3´);
Open;
end;


Obs: Não esqueça que, ao usar campos normais com SUM, COUNT ou funções do tipo, colocar os campos normais no GROUP BY, senão não roda.

Qualquer dúvida, é só falar

Buosi.


GOSTEI 0
Afarias

Afarias

29/07/2003

|Dá, sim... Faça o seguinte:
| {...}

|StrSQL := ´SELECT CAMPO1,CAMPO2,CAMPO3, ´;
|if campo1 > 0 then
|StrSQL := StrSQL + ´SUM(CAMPO1,CAMPO2) ´


Eu tenho uma dúvida: como é q ele sabe o valor de CAMPO1 sem antes ter executado a query??

Esta sua solução em Delphi não existe, para a necessidade apresentada, o código deve ficar no Interbase (stored procedures)

T+


GOSTEI 0
POSTAR