SQL比内部计数函数更好

SQL比内部计数函数更好,sql,sql-server,count,Sql,Sql Server,Count,我想这样做,但它抛出了一个sql错误: SELECT COUNT(items > 0) as totalItems FROM testTable Incorrect syntax near '>'. 我的目的是计算所有大于0的项目。它在MySQL中工作得很好,但SQLServer2008不喜欢它 谢谢。在SQL Server中,您需要一个案例语句: SELECT SUM(CASE WHEN items > 0 THEN 1 ELSE 0 END) as totalItems

我想这样做,但它抛出了一个sql错误:

SELECT COUNT(items > 0) as totalItems FROM testTable

Incorrect syntax near '>'.
我的目的是计算所有大于0的项目。它在MySQL中工作得很好,但SQLServer2008不喜欢它


谢谢。

在SQL Server中,您需要一个
案例
语句:

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()

或者,如果
为非负项:

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

在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()

或者,如果
为非负项:

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

好吧,这个问题本身可能就是

SELECT COUNT(*) as totalItems 
FROM testTable
WHERE items > 0
但是如果它是
WHERE
子句不适用的较大查询的一部分,那么您可以使用

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

正如戈登所建议的那样。

好吧,这个问题本身可能就是一个问题

SELECT COUNT(*) as totalItems 
FROM testTable
WHERE items > 0
但是如果它是
WHERE
子句不适用的较大查询的一部分,那么您可以使用

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

正如戈登所说。

我从来没有像现在这样爱MySQL=)。为什么会有这种偏好?@Shackrock。将布尔数作为整数处理是MySQL的一个特性,我非常喜欢它。@Shackrock。我不喜欢计数(2)=
计数(1)
。似乎很容易产生误解。我从来没有像现在这样爱MySQL=)。为什么会有这种偏好?@Shackrock。将布尔数作为整数处理是MySQL的一个特性,我非常喜欢它。@Shackrock。我不喜欢计数(2)=
计数(1)
。这似乎很容易引起误解。