2016-02-13 53 views
0

我想做到这一点,但它抛出一个SQL错误伟大:SQL比内部计数功能

SELECT COUNT(items > 0) as totalItems FROM testTable 

Incorrect syntax near '>'. 

我的目的是计算是比0更大这里所有项目。它在MySQL中效果很好,但SQL Server 2008不喜欢它。

谢谢。

回答

2

在SQL Server中,你需要一个case声明:

SELECT SUM(CASE WHEN items > 0 THEN 1 ELSE 0 END) as totalItems 
FROM testTable; 

您可以使用COUNT()如果你这样做:

SELECT COUNT(CASE WHEN items > 0 THEN 1 END) as totalItems 
FROM testTable; 

但我更喜欢使用SUM()

或者,如果items非负:

SELECT COUNT(NULLIF(items, 0)) as totalItems 
FROM testTable; 
+0

我从来没有比现在更喜欢MySQL =)。为什么偏好? – Shackrock

+0

@ Shackrock。 。 。将布尔值作为整数处理是我真正喜欢的MySQL的特性之一。 –

+0

@ Shackrock。 。 。我不喜欢那个“count(2)'='count(1)'。似乎很容易产生误解。 –

0

嗯,查询本身可能仅仅是

SELECT COUNT(*) as totalItems 
FROM testTable 
WHERE items > 0 

但是,如果它的WHERE条款没有按”较大查询的一部分t适用于那么你可以使用

SUM(CASE WHEN items > 0 THEN 1 ELSE 0 END) 

正如戈登建议。