2016-02-13 3 views
0

Я хотел сделать это, но это бросает ошибку SQL:SQL большой, чем внутри функции Count

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 Безразлично» т к вам тогда можно использовать

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

Как предлагает Гордон.

Смежные вопросы