2010-01-20 46 views

回答

0
SELECT CASE WHEN (field1 = 1 AND DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= field2) 
       THEN COUNT(*)  
     ELSE 0 
     END 
FROM SomeTable 
0
CASE 
    WHEN field1 = 1 
    AND DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= field2 
    THEN COUNT(*) 
    ELSE 'false' 
END 

注意的是,在SELECT列表这只作品,或HAVING条款,你应该有一个FIELD1条款GROUP BY和域2。原因是COUNT()是一个聚合函数。由于field1field2出现在聚合函数之外,因此必须使用GROUP BY子句强制实施这些字段的聚合。除非有合适的GROUP BY条款,否则大多数RDBMS-es将不允许你写这个,但是MySQL将会并且默默地为这些字段返回垃圾。

顺便说一句 - 我认为你不应该写"false",而只是FALSE - 现在选择的两条腿都有不同的类型(布尔值vs字符串)。数据库可能会强制类型,但这仍然是不好的做法。您应该确保CASE表达式的每个布尔表达式具有相同的数据类型。

相关问题