Jump to content
fimiani_lucas

IF dentro de um SELECT

Recommended Posts

Bom dia,

Estou iniciando neste mundo de SQL, portanto minha dúvida pode ser um pouco básica. =/

Gostaria incluir clausulas IF dentro de um SELECT e fazer cálculos e não estou conseguindo realizar.

Exemplo:

SELECT

IF A.CARGO = GERENTE

A.SALARIO + A.ABONO AS TOTAL_SALARIO

ELSE

A.SALARIO AS TOTAL_SALARIO

END-IF

FROM TABELA_FUNCIONARIOS

WHERE STATUS_FUNC = ATIVO

Share this post


Link to post
Share on other sites

Bom dia,

Segue um exemplo abaixo

SELECT  
  CASE 
    WHEN A.CARGO = 'GERENTE'  THEN A.SALARIO + A.ABONO
    ELSE A.SALARIO
  END AS TOTAL_SALARIO
FROM
  TABELA_FUNCIONARIOS
WHERE 
  STATUS_FUNC = ATIVO

Mais informações você pode consultar na documentação do oracle: http://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htm

Abraço!

Share this post


Link to post
Share on other sites

Olá Geovani,

Eu queria fazer um encadeamento de IFs... e não encontrei no manual da Oracle.

Exemplo:

IF TIPO_PROYECTO = 1 OR PORCENTAGEM_EXITO > 95%

MOVE GANHADO TO DESCRICAO_PROJETO

ELSE

IF FLAG = 1

MOVE EMPATADO TO DESCRICAO_PROJETO

ELSE

MOVE PERDEU TO DESCRICAO_PROJETO

END-IF

END-IF.

Share this post


Link to post
Share on other sites

Este ninho de ifs seriam em um select ou procedure plsql ?

seria algo como (select)

select 
(CASE WHEN (TIPO_PROYECTO = 1 OR PORCENTAGEM_EXITO > 95) THEN 'GANHADO'
      WHEN (FLAG = 1) THEN 'EMPATADO'
      ELSE 'PERDEU' END) DESCRICAO_PROJETO
from ...

Share this post


Link to post
Share on other sites

Exemplo

SELECT (CASE WHEN DATA_TYPE = 'CHAR'
             THEN (CASE WHEN DATA_LENGTH > 7 THEN 1 ELSE 0 END)
             ELSE 0 END)
FROM USER_TAB_COLUMNS

Share this post


Link to post
Share on other sites

Olá,

 

Poderiam me ajudar com a expressão abaixo?

 

Necessito fazer um case ou um if dentro de um select com a expressão "Diferente".

 

 IF (RF.ACAO_IN_CODIGO <> 28) then 
    sum (RF.MOV_RE_VALORCREMOE)
 ELSE
   RF.MOV_RE_VALORCREMOE
  end as valor_retencoes

 

Share this post


Link to post
Share on other sites
  sum(case when (RF.ACAO_IN_CODIGO <> 28) then RF.MOV_RE_VALORCREMOE
           else RF.MOV_RE_VALORCREMOE end)

 

Share this post


Link to post
Share on other sites

Oi! Gostaria de ajuda tb se possivel...

preciso fazer uma verificação do tipo:

 

max(case when rcc_attribute = 'firstName' then rcc_new_value 
         else (select max(cus_last_name) 
               from cst_customers 
               where idn_no = '&&CPF') 
         end) new_firstName,


 

só que essa função não funciona no oracle... :( poderiam me ajudar a ver o erro, por favor?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.