IF MySQL

MySQL

29/08/2016

Gostaria de saber oque está errado na sintaxe desse código


SELECT seg_categoria, Cliente, categoria,
(IF(seg_categoria = 'VPE',
IF(segmento_carteira LIKE '%campo1%' OR segmento_carteira LIKE '%campo2%' OR segmento_carteira LIKE '%campo3%',
'nome0',)

IF(segmento_carteira LIKE '%Campo4%' OR segmento_carteira LIKE '%campo5%' OR segmento_carteira LIKE '%campo6%'
OR segmento_carteira LIKE '%campo7%' OR segmento_carteira LIKE '%camp8%',
'nome1',)
,)

IF(seg_categoria = 'VPK','nom2',)

IF(seg_categoria = ('TOP' OR 'MAS'),'nome3',)
) AS 'responsavel'
FROM `dbext`.`tr_pedidos_vantive_completa` )
Luiz

Luiz

Curtidas 0

Melhor post

Guilherme Toledo

Guilherme Toledo

29/08/2016

Luiz, tente o código abaixo que refiz utilizando o CASE WHEN:

SELECT SEQ_CATEGORIA, CLIENTE, CATEGORIA,
CASE WHEN SEQ_CATEGORIA = 'VPE' THEN
CASE WHEN segmento_carteira LIKE '%campo1%' OR segmento_carteira LIKE '%campo2%' OR segmento_carteira LIKE '%campo3%' THEN
'nome0'
ELSE
CASE WHEN segmento_carteira LIKE '%Campo4%' OR segmento_carteira LIKE '%campo5%' OR segmento_carteira LIKE '%campo6%' OR segmento_carteira LIKE '%campo7%' OR segmento_carteira LIKE '%camp8%' THEN
'nome1'
END
END
ELSE
CASE WHEN seg_categoria = 'VPK' THEN
'nom2'
ELSE
CASE WHEN seg_categoria IN ('TOP','MAS') THEN
'nome3'
END
END
END AS 'responsavel'
FROM `dbext`.`tr_pedidos_vantive_completa`

OBS: Essas validações utilizando vários LIKES e OR, são muito pesadas para o banco. Tente estruturar seu banco de forma que os campos de 1 à 8 sejam um campo só de uma tabela. Você poderia resolver isso, talvez utilizando uma subquery que reuni-se na forma de union todos esses campos eliminando assim os Likes e Or's.
GOSTEI 3

Mais Respostas

Claudio Lopes

Claudio Lopes

29/08/2016

Luiz está dificil de ler o seu codigo, tem como identar ele? outra coisa sempre utilize "
" para facilitar.
Outra coisa acho que o CASE WHEN pode te ajudar mais Utilizando Select Case com MySQL
GOSTEI 1
Luiz

Luiz

29/08/2016

MUito obrigado pela atenção utilizei case e when deu certo
GOSTEI 0
POSTAR