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?
[code]SELECT
(
IF(AR.CANCELADO = ‘0’,‘C’, NULL)
ELSE IF(AR.EFETIVADO=‘1’,‘E’,NULL)
ELSE (AR.EFETIVADO=‘0’,‘A’,NULL)
) as STATU [/code]
[code]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[/code]
Syntax for IF...ELSE
IF ( Boolean_expression )
BEGIN
Sql Statement Block
END
ELSE
BEGIN
Sql Statement Block
END
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
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
Tentei como disse, e não deu certo não…
IF(AR.CANCELADO='0')
BEGIN
AR.STATU ='C'
END
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'
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
Desculpem, a solução apresentada pelo machado roda perfeitamente, e faz oque preciso…
OBg à todos…
meu código ficou assim…
[quote]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,[/quote]