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.

Author: marc_s, 2009-10-05

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.

 554
Author: Remus Rusanu, 2009-10-05 18:26:03
Precisava de obter o número de ocorrências de cada valor distinto. A coluna continha informações sobre a região. A simples consulta SQL com que acabei foi:
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
 74
Author: Netsi1964, 2017-07-31 16:17:41

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

 23
Author: venkatesh, 2015-04-30 07:33:08

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
 13
Author: KM., 2009-10-05 18:25:26
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type
 12
Author: van, 2009-10-05 18:27:17

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)
 -1
Author: Uday Phadke, 2017-02-01 08:27:44
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
 -5
Author: Taryn, 2015-06-02 17:24:29