web-dev-qa-db-fra.com

Requête SQL Server - Sélection de COUNT (*) avec DISTINCT

Dans SQL Server 2005, j'ai une table cm_production qui répertorie tout le code mis en production. La table a un numéro de ticket, un type de programme, un nom de programme et un numéro de push, ainsi que d'autres colonnes.

OBJECTIF: Compter tous les noms de programme DISTINCT par type de programme et numéro Push

Ce que j'ai jusqu'ici c'est:

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

Cela me permet d’être à mi-chemin, mais il compte tous les noms de programmes, et non les noms distincts (ce que je ne pense pas que ce soit le cas dans cette requête). Je suppose que je ne peux tout simplement pas comprendre pourquoi lui dire de ne compter que les noms de programmes distincts sans les sélectionner. Ou quelque chose.

384
somacore

Compter tous les noms de programme DISTINCT par type de programme et numéro Push

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

DISTINCT COUNT(*) retournera une ligne pour chaque compte unique. Ce que vous voulez, c'est COUNT(DISTINCT <expression>) : évalue l'expression de chaque ligne d'un groupe et renvoie le nombre de valeurs uniques non nulles.

661
Remus Rusanu

J'avais besoin d'obtenir le nombre d'occurrences de chaque valeur distincte. La colonne contenait des informations sur la région. La requête SQL simple avec laquelle je me suis retrouvé était:

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

Ce qui me donnerait une liste du genre:

Region, count
Denmark, 4
Sweden, 1
USA, 10
96
Netsi1964

Vous devez créer une table dérivée pour les colonnes distinctes, puis interroger le nombre à partir de cette table:

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

Ici dt est une table dérivée.

34
venkatesh
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE Push_number=@Push_number 
GROUP BY program_type
15
van

essaye ça:

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
KM.