2011-04-24 146 views
7

我要计算所有只拥有价值我想这样的行:SQL选择COUNT(值=值)可能吗?

SELECT Users.Balance, 
     Users.FreeBids, 
     COUNT(Bids.Burned = 0) AS 'ActiveBids', 
     COUNT(Bids.Burned = 1) AS 'BurnedBids' 
FROM Users 
     INNER JOIN Bids 
     ON Users.ID = Bids.BidderID 
WHERE Users.ID = 2 
GROUP BY Users.Balance, 
      Users.FreeBids 

它说:“Invalid Syntax Neat '='它完全没有‘=’ 我怎么能算被烧毁= 1的行。在他们和他们中的烧伤= 0?

感谢, 丹

回答

17

使用CASE声明

COUNT(CASE WHEN Bids.Burned=0 THEN 1 END) AS 'ActiveBids', 
COUNT(CASE WHEN Bids.Burned=1 THEN 1 END) AS 'BurnedBids' 

有一个隐含的ELSE NULLCOUNT只能算作NOT NULL值,所以这会给你你需要的结果。

+0

感谢的人就像魅力:) 什么短?笑 – Danpe 2011-04-24 22:52:49

+1

我更喜欢在这种情况下使用SUM在case语句的ELSE 0来消除警告说,这个代码将导致“通过聚合空值已消除”。 – 2011-04-24 22:53:41

+1

@Danpe - COUNT(NULLIF(Bids.Burned,1))'COUNT(NULLIF(Bids.Burned,0))'如果该列中唯一有效值为'0,1'且可能为'NULL' 。 – 2011-04-24 22:55:36