SQL Server query-Selecting COUNT (*) with DISTINCT
no servidor sql 2005 tenho uma tabela de produção cm_ que lista todos os códigos que foram colocados em produção. A tabela tem um número ticket_number, program_type, program_name e push_number, juntamente com algumas outras colunas.
objectivo: contar todos os nomes de programas distintos por tipo de programa e número de push
O que tenho até agora é:
SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type]
FROM cm_production
WHERE push_number=@push_number
GROUP BY program_type
Isso me leva a partway lá, mas está contando todos os nomes dos programas, não os distintos (o que eu não espero que faça nisso consulta). Acho que não consigo perceber como dizer-lhe para contar apenas os diferentes nomes dos programas sem os seleccionar. Ou algo assim.
7 answers
Conta todos os nomes de programas distintos por tipo de programa e número de push
SELECT COUNT(DISTINCT program_name) AS Count,
program_type AS [Type]
FROM cm_production
WHERE push_number=@push_number
GROUP BY program_type
A contagem distinta (*) irá devolver uma linha para cada contagem única. O que você quer é Contagem(expressão distinta ): avalia a expressão para cada linha de um grupo e devolve o número de valores únicos e não completos.
SELECT Region, count(*)
FROM item
WHERE Region is not null
GROUP BY Region
O que me daria uma lista como:
Region, count
Denmark, 4
Sweden, 1
USA, 10
Você tem que criar uma tabela temporária para as colunas distintas e, em seguida, consultar a contagem a partir dessa tabela
SELECT COUNT(*)
FROM (SELECT DISTINCT column1,column2
FROM tablename
WHERE condition ) as dt
Aqui o dt é uma tabela temporária
Tenta isto:
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
Este é um bom exemplo onde você quer obter a contagem de Pincode que está armazenado no último campo de endereço
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