IF MySQL
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` )
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
Curtidas 0
Melhor post
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.
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
29/08/2016
Luiz está dificil de ler o seu codigo, tem como identar ele? outra coisa sempre utilize "
Outra coisa acho que o CASE WHEN pode te ajudar mais Utilizando Select Case com MySQL
" para facilitar.
Outra coisa acho que o CASE WHEN pode te ajudar mais Utilizando Select Case com MySQL
GOSTEI 1
Luiz
29/08/2016
MUito obrigado pela atenção utilizei case e when deu certo
GOSTEI 0