Запрос SQL Server - выбор COUNT (*) с помощью DISTINCT
В SQL Server 2005 у меня есть таблица cm_production, которая перечисляет весь код, который был запущен в производство. В таблице есть тикетный номер, номер_программы, а также имя_программы и номер_толбца вместе с некоторыми другими столбцами.
ЦЕЛЬ: Подсчитать все имена программ DISTINCT по типу программы и номеру push
То, что я до сих пор это:
DECLARE @push_number INT;
SET @push_number = [HERE_ADD_NUMBER];
SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type]
FROM cm_production
WHERE [email protected]_number
GROUP BY program_type
Это приводит меня к тому, что я на полпути, но при этом подсчитываются все имена программ, а не отдельные (чего я не ожидаю в этом запросе). Думаю, я просто не могу понять, как сказать, что нужно считать только разные названия программ, не выбирая их. Или что-то.
Ответы
Ответ 1
Подсчитать все имена программ DISTINCT по типу программы и номеру push
SELECT COUNT(DISTINCT program_name) AS Count,
program_type AS [Type]
FROM cm_production
WHERE [email protected]_number
GROUP BY program_type
DISTINCT COUNT(*)
вернет строку для каждого уникального счетчика. Вам нужно COUNT(DISTINCT <expression>)
: вычисляет выражение для каждой строки в группе и возвращает количество уникальных ненулевых значений.
Ответ 2
Мне нужно было получить количество вхождений каждого отдельного значения. Столбец содержит информацию о регионе.
Простым SQL-запросом, в котором я оказался, был:
SELECT Region, count(*)
FROM item
WHERE Region is not null
GROUP BY Region
Который дал бы мне список вроде, скажем:
Region, count
Denmark, 4
Sweden, 1
USA, 10
Ответ 3
Вы должны создать производную таблицу для отдельных столбцов и затем запросить счет из этой таблицы:
SELECT COUNT(*)
FROM (SELECT DISTINCT column1,column2
FROM tablename
WHERE condition ) as dt
Здесь dt
- производная таблица.
Ответ 4
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type]
FROM cm_production
WHERE [email protected]_number
GROUP BY program_type
Ответ 5
попробуйте следующее:
SELECT
COUNT(program_name) AS [Count],program_type AS [Type]
FROM (SELECT DISTINCT program_name,program_type
FROM cm_production
WHERE [email protected]_number
) dt
GROUP BY program_type
Ответ 6
Это хороший пример, где вы хотите получить счет Pincode, который хранится в последнем поле адреса
SELECT DISTINCT
RIGHT (address, 6),
count(*) AS count
FROM
datafile
WHERE
address IS NOT NULL
GROUP BY
RIGHT (address, 6)
Ответ 7
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