2010-01-20 45 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表達式的每個布爾表達式具有相同的數據類型。

相關問題