sqlsql-servert-sqlsql-server-2005distinct

Selecting COUNT(*) with DISTINCT


In SQL Server 2005 I have a table cm_production that lists all the code that's been put into production. The table has a ticket_number, program_type, program_name and push_number along with some other columns.

GOAL: Count all the DISTINCT program names by program type and push number.

What I have so far is:

DECLARE @push_number INT;
SET @push_number = [HERE_ADD_NUMBER];

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type

This gets me partway there, but it's counting all the program names, not the distinct ones (which I don't expect it to do in that query). I guess I just can't wrap my head around how to tell it to count only the distinct program names without selecting them. Or something.


Solution

  • Count all the DISTINCT program names by program type and push number

    SELECT program_type  AS [Type],
           Count(DISTINCT program_name) AS [Count],
    FROM   cm_production
    WHERE  push_number = @push_number
    GROUP  BY program_type 
    

    DISTINCT COUNT(*) will return a row for each unique count. What you want is COUNT(DISTINCT <expression>): evaluates expression for each row in a group and returns the number of unique, non-null values.