2011-09-03 5 views
6

En la siguiente consulta, deseo agregar una condición AND dentro de los CASOS ¿CUÁNDO y antes de ENTONCES es eso posible?Caso en ese momento, pero con la condición AND dentro de cuándo y antes de entonces

por ejemplo, cuando R y table1.name = "Jones" y luego 'muy alto'

SELECT table1.id, table1.name, 
    CASE table1.event 
    WHEN 'r' THEN 'very high' 
    WHEN 't' THEN 'very low' 
    ELSE (SELECT table2.risk FROM table2 WHERE table2.value <= table1.value 
      ORDER BY table2.value DESC LIMIT 1) 
    END AS risk 
FROM table1 
ORDER BY FIELD(table1.event, 'r', 'f', 't'), table1.value DESC 

Respuesta

20

puede volver a escribir su declaración como esta para lograr lo que desea

SELECT table1.id, table1.name, 
    CASE 
    WHEN table1.event = 'r' AND table1.name = 'jones' THEN 'very high' 
    WHEN table1.event = 't' AND table1.name = 'smith' THEN 'very low' 
    ELSE (SELECT table2.risk FROM table2 WHERE table2.value <= table1.value 
      ORDER BY table2.value DESC LIMIT 1) 
    END AS risk 
FROM table1 
ORDER BY FIELD(table1.event, 'r', 'f', 't'), table1.value DESC 

aviso que debe eliminar table1.event a Después de la declaración CASE. documentation here

+0

+1, estaba editando esa idea en mi respuesta cuando se ha publicado esto =) – jadarnel27

+1

@ jadarnel217 jaja gracias, voy a +1 su respuesta también, ya que es lo mismo. –

4

Cualquier cosa que se evalúa como un valor booleano (verdadero o falso) puede ir en la WHEN condición de un CASE declaración. Para que pueda reemplazar 'r' con:

('r' AND table1.name='jones')

Pensando en esto más, es posible que tenga que perder el table1.event después CASE

SELECT table1.id, table1.name, 
    CASE 
     WHEN (table1.event = 'r' AND table1.name='Jones') THEN 'very high' 
     WHEN table1.event = 't' THEN 'very low' 
     ELSE (SELECT table2.risk 
       FROM table2 
       WHERE table2.value <= table1.value 
       ORDER BY table2.value DESC LIMIT 1) 
    END AS risk 
FROM table1 
ORDER BY FIELD(table1.event, 'r', 'f', 't'), table1.value DESC 
3

Cambiar de case <column> when <value> then ... a case when <condition> then ...:

CASE 
WHEN table1.event = 'r' AND table1.active = 1 THEN 'very high' 
... 
Cuestiones relacionadas