remove AS STATUS from where clause
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'
But your CASE really not needed. Just use the CASE condition as a standalone WHERE condition, for example
[...] WHERE quantity > num_used AND CURDATE( ) BETWEEN coupon_start_date AND coupon_end_date AND coupon_status <> '2'
source share