Вы могли использовать SUM
(не COUNT
!) объединенный с CASE
оператор, как это:
SELECT SUM(CASE WHEN myColumn=1 THEN 1 ELSE 0 END)
FROM AD_CurrentView
Примечание: в моем собственном тесте NULL
с не были проблемой, хотя это может быть зависимым среды. Вы могли обработать, аннулирует, такие как:
SELECT SUM(CASE WHEN ISNULL(myColumn,0)=1 THEN 1 ELSE 0 END)
FROM AD_CurrentView
Я обычно делаю то, что Josh рекомендовал, но провел коллективное обсуждение и протестировал немного фальшивую альтернативу, которую я испытывал желание совместно использовать.
можно использовать в своих интересах факт, которые РАССЧИТЫВАЮТ (ColumnName) не рассчитывает, АННУЛИРУЕТ, и используйте что-то вроде этого:
SELECT COUNT(NULLIF(0, myColumn))
FROM AD_CurrentView
NULLIF - возвращает ПУСТОЙ УКАЗАТЕЛЬ, если эти два, переданные в значениях, являются тем же.
Преимущество: Экспрессы Ваше намерение СЧИТАТЬ строки вместо того, чтобы иметь СУММУ () нотация. Недостаток: Не как ясный, как это работает ("волшебство" обычно плохо).
Я бы использовал этот синтаксис. Он достигает того же, что и предложения Джоша и Криса, но с тем преимуществом, что он совместим с ANSI и не привязан к конкретному поставщику базы данных.
select count(case when myColumn = 1 then 1 else null end)
from AD_CurrentView