[RESOLVIDO] Erro ao fazer condicional Mysql

7 respostas
W
Pessoal, eu tenho seguinte problema.. eu preciso fazer essa consulta em sql, onde se a fatura estiver cancelada, eu vou exibir C, se não, eu exibo 1, e se estiver cancelada, eu exibo A de aberto. porém, quando rodo a instrução abaixo, não funciona.. alguém sabe me dizer onde está meu erro?
SELECT
(
IF(AR.CANCELADO = '0','C', NULL)
ELSE IF(AR.EFETIVADO='1','E',NULL)
ELSE (AR.EFETIVADO='0','A',NULL)

) as STATU
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ELSE IF(AR.EFETIVADO='1','E',NULL)
ELSE (AR.EFETIVADO='0','A',NULL)

) as STATU' at line 4

7 Respostas

D

Syntax for IF...ELSE IF ( Boolean_expression ) BEGIN Sql Statement Block END ELSE BEGIN Sql Statement Block END

E

Não estou com um MySQL aqui, mas olhando pela documentação, você não pode usar ELSE com IF nesse caso.

http://dev.mysql.com/doc/refman/4.1/pt/control-flow-functions.html

SELECT  
(
  IF (AR.CANCELADO = '0', 'C', 
      IF (AR.EFETIVADO = '1', 'E', 'A')
  )
) as STATU
F

tenta fazer assim

Select 
  case 
      when AR.CANCELADO = '0' THEN 'C'
      when AR.EFETIVADO = '1' THEN 'E'
      when AR.EFETIVADO = '0' then 'A'
  end as status
case

[editado] PS: o do entanglement deve funcionar melhor =P

Abraços

W

Tentei como disse, e não deu certo não…

IF(AR.CANCELADO='0') BEGIN AR.STATU ='C' END

W

Acho que o case não resolve meu problema pelo seguinte…
se eu tiver uma conta cancelada=1 e que tenha sido efetivada, deverá aparecer C ao invés de E.
e vice-versa…

when AR.CANCELADO = '1' THEN 'C' when AR.EFETIVADO = '1' THEN 'E'

W

Por isso eu precisaria fazer algo parecido com em java

if(cancelado) entra e não testa os outros.. else if(efetivado) se passou pelo if entra e não testa os seguintes else se passou sem entrar nos anteriores entra e continua

W

Desculpem, a solução apresentada pelo machado roda perfeitamente, e faz oque preciso…
OBg à todos…
meu código ficou assim…

SELECT

case
when AR.CANCELADO = ‘1’ THEN ‘C’ //Testa, se true sai do case, se false, testa os outros2
when AR.EFETIVADO = ‘1’ THEN ‘E’//Se passou sem entrar no primeiro testa esse, se true sai do case se false, testa o próx.
when AR.EFETIVADO = ‘0’ then ‘A’//Se passou pelos anteriores, sem entrar, testa esse…
end as statu,

Criado 25 de julho de 2011
Ultima resposta 25 de jul. de 2011
Respostas 7
Participantes 4