2009-10-05 53 views
279

En SQL Server 2005 tengo una tabla cm_production que enumera todo el código que se ha puesto en producción. La tabla tiene un ticket_number, program_type, y program_name y push_number junto con algunas otras columnas.Consulta de SQL Server - Seleccionar COUNT (*) con DISTINCT

OBJETIVO: Contar todos los nombres de los programas DISTINCT por tipo de programa y empuje número

Lo que hasta ahora tenemos es:

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type 

Esto me pone hasta cierto punto, pero que está contando todos los nombres de los programas, no los distintos (que no espero que haga en esa consulta). Supongo que no puedo entender cómo decir que cuente solo los nombres de programas distintos sin seleccionarlos. O algo.

Respuesta

478

contar todos los nombres de los programas DISTINCT por tipo de programa y empuje número

SELECT COUNT(DISTINCT program_name) AS Count, 
    program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type 

recuento diferente (*) devolverá una fila para cada uno único contar. Lo que quiere es COUNT(DISTINCT expression): evalúa la expresión de cada fila en un grupo y devuelve la cantidad de valores únicos no nulos.

+4

Gracias. Me cuesta trabajo conceptualizar las consultas SQL por algún motivo. Esto funciona perfectamente – somacore

+4

¿Cómo puedo obtener el RECUENTO de entradas DISTINCT basadas en más de una columna? Traté de hacer 'SELECT COUNT (DISTINCT col1, col2)', pero 'COUNT' parece interpretar esto como una cantidad incorrecta de argumentos. –

+3

@Bepetersn: sugiero que hagas una pregunta por separado –

13

probar esto:

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 
11
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type 
64

Necesito obtener el número de apariciones de cada valor distinto. La columna contenía información de la región. La simple consulta SQL que terminó con era:

SELECT Region, count(*) 
FROM item 
WHERE Region is not null 
GROUP BY Region 

Lo que me daría una lista como, por ejemplo:

Region, count 
Denmark, 4 
Sweden, 1 
USA, 10 
+1

En postgresql, puede simplemente usar 'count (*)' en lugar de 'count (*) AS count'. – ogirginc

+0

hey @ Netsi1964 Se usa la misma consulta pero quiero Región, Estado, Cuenta, ¿puede ser posible? Por favor, ayúdenme –

18

Tienes que crear una tabla temporal para las columnas distintas y luego consultar la contar de esa tabla

SELECT COUNT(*) 
FROM (SELECT DISTINCT column1,column2 
     FROM tablename 
     WHERE condition) as dt 

aquí dt es una tabla temporal

+0

¡Gracias! He usado mucho SQL en mi vida en muchas bases de datos, y esta es la primera vez que tengo que calificarlo como una tabla temporal con "como X". – Mmm

+2

Tenga en cuenta que la terminología normal para "dt" aquí es _derived_ table, no temp table – 8forty

-5
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 
-1

Este es un buen ejemplo en el que desea obtener el recuento de código PIN, que se almacena en el último campo de dirección de

SELECT DISTINCT 
    RIGHT (address, 6), 
    count(*) AS count 
FROM 
    datafile 
WHERE 
    address IS NOT NULL 
GROUP BY 
    RIGHT (address, 6) 
Cuestiones relacionadas