Somar dois campos em função de condição na Select do IB.
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.
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
Curtidas 0
Respostas
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......
Procure documentos sobre História de Procedure......
GOSTEI 0
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+
|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
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:
Correto. Foi mal... o certo é procedure.... Mas deu pra entender... :oops: :oops: :oops:
GOSTEI 0
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.
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
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+
| {...}
|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