Sql Server эквивалент агрегатной функции COUNTIF

148
задан pnuts 24 April 2015 в 01:10
поделиться

3 ответа

Вы могли использовать 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
311
ответ дан Tim Barrass 24 April 2015 в 01:10
поделиться

Я обычно делаю то, что Josh рекомендовал, но провел коллективное обсуждение и протестировал немного фальшивую альтернативу, которую я испытывал желание совместно использовать.

можно использовать в своих интересах факт, которые РАССЧИТЫВАЮТ (ColumnName) не рассчитывает, АННУЛИРУЕТ, и используйте что-то вроде этого:

SELECT COUNT(NULLIF(0, myColumn))
FROM AD_CurrentView

NULLIF - возвращает ПУСТОЙ УКАЗАТЕЛЬ, если эти два, переданные в значениях, являются тем же.

Преимущество: Экспрессы Ваше намерение СЧИТАТЬ строки вместо того, чтобы иметь СУММУ () нотация. Недостаток: Не как ясный, как это работает ("волшебство" обычно плохо).

49
ответ дан Chris Shaffer 24 April 2015 в 01:10
поделиться

Я бы использовал этот синтаксис. Он достигает того же, что и предложения Джоша и Криса, но с тем преимуществом, что он совместим с ANSI и не привязан к конкретному поставщику базы данных.

select count(case when myColumn = 1 then 1 else null end)
from   AD_CurrentView
19
ответ дан 23 November 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: