Подсчет строк в столбце, где значение другого столбца равно 1 - PullRequest
2 голосов
/ 15 августа 2011

Я использую select count distinct для подсчета количества записей в столбце. Тем не менее, я только хочу подсчитать записи, где значение другого столбца равно 1.

Итак, мой стол выглядит примерно так:

Имя ------ Тип
абв --------- 1
Защиту ---------- 2
ГХИ ---------- 2
JKL ----------- 1
MnO -------- 1

и я хочу, чтобы запрос только подсчитывал abc, jkl и mno и, таким образом, возвращал '3'.

Я не смог сделать это с помощью функции CASE, потому что это, похоже, работает только с условиями в том же столбце.

РЕДАКТИРОВАТЬ: Извините, я должен был добавить, я хочу сделать запрос, который учитывает оба типа. Таким образом, результат должен выглядеть примерно так: 1 --- 3 2 --- 2

Ответы [ 4 ]

2 голосов
/ 15 августа 2011

Я думаю, что вы захотите (при условии, что вы не захотите считать ('abc', 1) дважды, если он в вашей таблице дважды):

select count(distinct name) 
  from mytable
 where type = 1

РЕДАКТИРОВАТЬ: для получения всех типов

select type, count(distinct name)
  from mytable
 group by type
 order by type
2 голосов
/ 15 августа 2011
SELECT COUNT(*) 
  FROM dbo.[table name] 
  WHERE [type] = 1;

Если вы хотите вернуть счет по типу:

SELECT [type], COUNT(*)
  FROM dbo.[table name]
  GROUP BY [type]
  ORDER BY [type];

Вам следует избегать использования ключевых слов, таких как type, в качестве имен столбцов - вы можете избежать использования множества квадратных скобок, если используетеболее конкретное, незарезервированное слово.

1 голос
/ 15 августа 2011

выберите количество (1) из таблицы, где тип = 1

1 голос
/ 15 августа 2011
;WITH MyTable (Name, [Type]) AS
(
SELECT 'abc', 1
UNION
SELECT 'def', 2
UNION
SELECT 'ghi', 2
UNION
SELECT 'jkl', 1
UNION
SELECT 'mno', 1
) 
SELECT COUNT( DISTINCT Name)
FROM MyTable
WHERE [Type] = 1
...