2012-02-02 27 views
26

las siguientes obras - Y cuando regresa de cargo igual a 1 persona toma por defecto Nmysql SELECT IF con OR

IF(fd.charge_back = 1, 'Y', 'N') AS charge_back 

sin embargo, me parece que no puede conseguir éste trabajo? Es la sintaxis válida

IF(compliment = ('set' OR 'Y' OR 1), 'Y', 'N') AS customer_compliment 
+6

¿Qué sucede si cambia su condición a 'complemento IN ('conjunto', 'S', '1')' – Lamak

+1

Puede considerar simplemente no hacer esto en su consulta. Esto es formatear, no consultar más. Obtienes un claro 1/0 verdadero/falso a cambio, que debería ser el truco. Por ejemplo, podría hacer: if (complementar) etc. que no se puede hacer con una cadena como S/N. También Y/N es independiente del idioma mientras que el booleano no lo es. Entonces, al traducir a holandés, por ejemplo, tendría que convertir S/N nuevamente a J/N. En resumen: Tal vez simplemente no haga esto a menos que tenga una muy buena razón para hacerlo o simplemente tenga que tomar una solución de corte. –

+0

Gracias por sus comentarios, estoy de acuerdo en que boolean sería un mejor valor para usar. Sin embargo, estoy trabajando con datos existentes y no puedo cambiar todos los valores sin más efecto de toque en otras partes. –

Respuesta

54

Es de suponer que esto funcionaría:

IF(compliment = 'set' OR compliment = 'Y' OR compliment = 1, 'Y', 'N') AS customer_compliment 
+0

Quizás sea una pregunta tonta, pero ¿funciona una cláusula 'IN' aquí? P.ej. 'IF (complemento IN ('set', 'Y', 1), 'Y', 'N') AS customer_compliment'? –

3
IF(compliment IN('set','Y',1), 'Y', 'N') AS customer_compliment 

hará el trabajo como Buttle Butkus sugeridos.