Fórum Criar condição com IF no SP - Firebird 2.0 #58509
11/07/2007
0
CREATE PROCEDURE SPCONCATENATION ( id_sal integer, id_formula integer, descricao varchar(80), id_func integer, id_gerarformula integer, formula varchar(50), quantia float, salario numeric(15,2)) returns ( quantia float, b_calculo varchar(10)) as begin if (exists(select A.id_sal, cast(A.salario as varchar(10))||B.formula||´*´||B.quantia, B.id_formula, B.descricao,A.id_func, A.nome, B.id_gerarformula from salario_M A left join formulas B on B.id_gerarformula = A.id_sal)) then IF (:b_calculo = ´Fixo´) then select A.id_sal, B.formula, B.id_formula, B.descricao, A.id_func, A.nome, B.id_gerarformula from salario_M A left join formulas B on B.id_gerarformula = A.id_sal group by 1,2,3,4,5,6,7 order by 6 into :id_func; else IF ((:b_calculo = ´Salario_Contratado´) and (:quantia = 0)) then select A.id_sal, cast(A.salario as varchar(10))||B.formula, B.id_formula, B.descricao,A.id_func, A.nome, B.id_gerarformula from salario_M A left join formulas B on B.id_gerarformula = A.id_sal group by 1,2,3,4,5,6,7 order by 6 into :id_func; else IF ((:b_calculo = ´Salario_Contratado´) and (:quantia <> 0)) then select A.id_sal, cast(A.salario as varchar(10))||B.formula||´*´||B.quantia, B.id_formula, B.descricao,A.id_func, A.nome, B.id_gerarformula from salario_M A left join formulas B on B.id_gerarformula = A.id_sal group by 1,2,3,4,5,6,7 order by 6 into :id_func; suspend; end;
Mais alem de eu nao saber como fazer esta SP ainda contem erros
O que eu quero eh quando o IF (bcalculo = ´´) and (quantia ...) estiver satisfazendo a condiçao mostrar o select como esta ai no SP em um dbgrid.
Esses dois campos b_calculo e quantia faz parte de uma tabela, mais nao sei se pode ser feito assim.
Bom alias nem sei fazer esta procedure.
Fiz um pequeno modelo com o CASE no query com apenas uma tabela.
select id_formula, case marcar when ´True´ then case B_calculo when ´Salario_Governo´ then descricao || ´-´ || formula end else case B_Calculo when ´Salario_Contratado´ then descricao || ´-´ || formula || ´*´ || quantia end end as CamposM_N, count(marcar)as quantidade //aqui nem precisa, so fiz pra saber quanto tem cfe. o case. from formulas group by 1,2 order by 1
Adriano_servitec
Curtir tópico
+ 0Posts
11/07/2007
Adriano_servitec
select id_formula, case when marcar=´True´ and B_Calculo = ´Salario_Governo´ then descricao || ´-´ || formula when marcar=´True´ and B_Calculo = ´Salario_Contratado´ then descricao || ´-´ || formula || ´*´ || quantia when marcar=´True´ and B_Calculo = ´Fixo´ Then descricao end as CamposM_N, count(marcar)as quantidade from formulas group by 1,2 order by 1
Entao gostaria de saber se tem como unir as duas tabelas no join para msotrar como o select que estou tentando fazer na SP, ou se tem como fazer uma SP do jeito que estou precisando.
Gostei + 0
11/07/2007
Adriano_servitec
Entao ficou assim (caso alguem precise de algum exemplo pra query tai)
select A.id_empresa, A.id_sal, B.id_formula, B.descricao, A.id_func, A.nome, B.id_gerarformula, case when B.marcar=´True´ and B.B_Calculo = ´Fixo´ and B.valor = ´False´ Then A.salario when B.marcar=´True´ and B.B_Calculo = ´Salario_Contratado´ and B.quantidade = ´True´ and B.valor = ´False´ then cast(A.salario as varchar(10))||B.formula||´*´||B.quantia when B.marcar=´True´ and B.B_Calculo = ´Salario_Contratado´ and B.quantidade = ´False´ and B.valor = ´False´ then cast(A.salario as varchar (10))||B.formula when B.marcar=´True´ and B.B_Calculo = ´Salario_Contratado´ and B.quantidade = ´False´ and B.valor = ´True´ then B.vl_Informado when B.marcar=´True´ and B.B_Calculo = ´Salario_Governo´ and B.quantidade = ´True´ and B.valor = ´False´ then cast(A.salario as varchar(10))||B.formula||´*´||B.quantia when B.marcar=´True´ and B.B_Calculo = ´Salario_Governo´ and B.quantidade = ´False´ and B.valor = ´False´ then cast(A.salario as varchar (10))||B.formula when B.marcar=´True´ and B.B_Calculo = ´Salario_Governo´ and B.quantidade = ´False´ and B.valor = ´True´ then B.vl_informado end as CamposM_N from salario_m A left join formulas B on B.id_gerarformula = A.id_sal where B.marcar = ´True´ order by 1,5
Bom tai, caso resolvido
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)