2011-07-25 17 views
6

Quiero obtener solo estado = 1 registros. Pero no tengo una columna de estado en mi tabla. Así que obtuve el valor usando CASO ... CUANDO ... ENTONCES. Pero cuando trato de usar mayúsculas/minúsculas en where cláusula, muestra un error de sintaxis.Cómo usar el caso en donde la cláusula

mi consulta

SELECT SQL_CALC_FOUND_ROWS *, 
    CASE 
     WHEN quantity > num_used AND (CURDATE() BETWEEN coupon_start_date AND coupon_end_date) THEN '1' 
     ELSE '0' 
    END AS STATUS 
FROM 
    table_coupon_code 
WHERE 
    (CASE 
     WHEN quantity > num_used AND (CURDATE() BETWEEN coupon_start_date AND coupon_end_date) THEN '1' 
     ELSE '0' 
    END AS STATUS) = '1' AND coupon_status <> '2' 

¿Cómo puedo hacer esto?

Respuesta

16

quitar AS STATUS desde donde cláusula

SELECT SQL_CALC_FOUND_ROWS * , 
    CASE WHEN quantity > num_used AND (CURDATE() BETWEEN coupon_start_date AND coupon_end_date) 
    THEN '1' 
    ELSE '0' 
    END AS STATUS 
FROM table_coupon_code 
WHERE 
CASE WHEN quantity > num_used AND (CURDATE() BETWEEN coupon_start_date AND coupon_end_date) 
    THEN '1' 
    ELSE '0' 
    END = '1' 
AND coupon_status <> '2' 

Pero su CASE es realmente innecesario. Sólo tiene que utilizar su condición CASE como stand-alone WHERE estado, como

[...] 
WHERE quantity > num_used AND 
CURDATE() BETWEEN coupon_start_date AND coupon_end_date AND 
coupon_status <> '2' 
+0

muchas gracias – Gowri

+0

Pero su 'CASO' es realmente innecesario, vea mi publicación editada. – rabudde

3

Si no desea repetir la declaración de caso se podría envolver la selección en una subselección o hacer una vista. Subseleccionar es algo así como

select status 
    from (select case 
      when zip like '4321%' then 1 else 0 end as status 
      from adr 
     ) t 
where status = 1; 
0

supongo que tienes alguna otra consulta, más complicada, como la que usted ha proporcionado es equivalente a:

SELECT SQL_CALC_FOUND_ROWS * , 
     '1' AS STATUS 
FROM table_coupon_code 
WHERE quantity > num_used 
    AND CURDATE() BETWEEN coupon_start_date AND coupon_end_date 
    AND coupon_status <> '2' 
1

Nadie se planteaba la cláusula HAVING?

Esto le permite consultar las columnas seleccionadas, en lugar de los resultados reales. Ideal para usar llamadas de casos y funciones.

Cuestiones relacionadas