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.
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.
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
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.
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type]
FROM cm_production
WHERE Push_number=@Push_number
GROUP BY program_type
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