SQL: Compter les valeurs distinctes d'une colonne en fonction de plusieurs critères dans les autres colonnes
Je suis en train de faire compter les valeurs distinctes en fonction de plusieurs critères.
Les données de l'échantillon de l'exercice ci-dessous.
Table1 ╔════════╦════════╦══════╗ ║ Bug ID ║ Statut ║ Test ║ ╠════════╬════════╬══════╣ º 1 ║ Ouvrir º w ║ ║ 2 ║ Fermé º w ║ ║ 3 ║ Ouvrir º w ║ ║ 4 ║ Ouvrir ║ x ║ ║ 4 ║ Ouvrir ║ x ║ ║ 5 ║ Fermé ║ x ║ ║ 5 ║ Fermé ║ x ║ ║ 5 ║ Fermé ║ y ║ ║ 6 ║ Ouvrir ║ z ║ ║ 6 ║ Ouvrir ║ z ║ ║ 6 ║ Ouvrir ║ z ║ ║ 7 ║ Fermé ║ z ║ ║ 8 ║ Fermé ║ z ║ ╚════════╩════════╩══════╝ Souhaité Résultats De La Requête ╔══════╦═══════════╦════════════╗ ║ Test ║ Bugs Ouverts ║ Total De Bugs ║ ╠══════╬═══════════╬════════════╣ º w º 2 ║ 3 ║ ║ x ║ 1 ║ 2 ║ ║ y ║ 0 º 1 ║ ║ z ║ 1 ║ 3 ║ ╚══════╩═══════════╩════════════╝
Un Bug peut être trouvé dans plusieurs Essais, plusieurs fois pour le même Test(ex: 6), ou les deux (ex: 5).
La requête suivante fonctionne très bien pour délivrer précisément de "Total des Bugs'
SELECT
Test,
COUNT(DISTINCT Bug ID) AS "Total Bugs"
FROM
Table1
GROUP BY Test
Mes recherches m'a conduit à des variations sur la requête suivante. Ils manquent les différents bugs et donc retourner des résultats incorrects (voir ci-dessous la requête) pour les " Bugs Ouverts colonne
SELECT
Test,
SUM(CASE WHEN Status <> 'Closed' THEN 1 ELSE 0 END) AS "Open Bugs"
FROM
Table1
GROUP BY Test
╔══════╦═══════════╗ ║ Test ║ Bugs Ouverts ║ ╠══════╬═══════════╣ º w º 2 ║ ║ x ║ 2 ║ ║ y ║ 0 ║ ║ z ║ 3 ║ ╚══════╩═══════════╝
Bien sûr de mon résultat final doit fournir à la fois compter les colonnes dans une table (plutôt que d'utiliser des requêtes comme je l'ai fait pour les besoins de la démonstration).
Je ne voudrais pas compter sur plusieurs sous-requêtes parce que mon exemple vivant aura plus que deux colonnes de chiffres provenant de la même table, mais différents critères.
Je travaille avec SQL Server (pas sûr de la libération).
Toute aide est grandement appréciée.
OriginalL'auteur Blake | 2013-04-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez avoir une condition
count(distinct)
en utilisant ce code:La
case
instruction vérifie la condition. Lorsque la valeur est true, il retourne laBug ID
. Lorsqu'il n'est pas présent, la valeur par défaut est NULL, alors l'id n'est pas comptabilisés.OriginalL'auteur Gordon Linoff