SQL Server query-выбор COUNT (*) с помощью DISTINCT
в SQL Server 2005 у меня есть таблица cm_production, в которой перечислены все коды, которые были введены в производство. Таблица имеет ticket_number, program_type и program_name и push_number вместе с некоторыми другими столбцами.
цель: подсчитайте все отдельные имена программ по типу программы и нажмите номер
то, что у меня есть до сих пор:
SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type]
FROM cm_production
WHERE push_number=@push_number
GROUP BY program_type
Это заставляет меня частично там, но он подсчитывает все имена программ, а не отдельные (чего я не ожидаю это делать в том запросе). Я думаю, я просто не могу обернуть голову вокруг того, как сказать ему, чтобы считать только отдельные имена программ, не выбирая их. Или что-то еще.
7 ответов:
подсчитайте все отдельные имена программ по типу программы и нажми
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] FROM cm_production WHERE push_number=@push_number GROUP BY program_typeDISTINCT COUNT (*) возвращает строку для каждого уникального счетчика. То, что вы хотите COUNT(DISTINCT выражение): вычисляет выражение для каждой строки в группе и возвращает количество уникальных значений, не равных null.
мне нужно было получить количество вхождений каждого отдельного значения. Столбец содержал информацию о регионе. Простой SQL-запрос, который я получил, был:
SELECT Region, count(*) FROM item WHERE Region is not null GROUP BY Regionкоторый дал бы мне список, как, скажем:
Region, count Denmark, 4 Sweden, 1 USA, 10
вы должны создать временную таблицу для различных столбцов, а затем запросить счетчик из этой таблицы
SELECT COUNT(*) FROM (SELECT DISTINCT column1,column2 FROM tablename WHERE condition ) as dtздесь dt-это временная таблица
попробуйте это:
SELECT COUNT(program_name) AS [Count],program_type AS [Type] FROM (SELECT DISTINCT program_name,program_type FROM cm_production WHERE push_number=@push_number ) dt GROUP BY program_type
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] FROM cm_production WHERE push_number=@push_number GROUP BY program_type
это хороший пример, где вы хотите получить количество Пинкодов, которые хранятся в последнем из поля адреса
SELECT DISTINCT RIGHT (address, 6), count(*) AS count FROM datafile WHERE address IS NOT NULL GROUP BY RIGHT (address, 6)
select count (distinct NumTar),'PROPIAS' from ATM_TRANe with (nolock) where Fecha>='2014-01-01' AND Fecha<='2015-05-31'and NetDestino=0 and SystemCodResp=0 group by NetDestino union select sum (contar),'FORANEAS' from ( select count(distinct NumTar) as contar from ATM_TRANe with (nolock) where Fecha>='2014-01-01' AND Fecha<='2014-01-31' and NetDestino!=0 and SystemCodResp=0 group by NetDestino )dt
Comments