J'ai une requête SQL et je veux pouvoir compter le nombre total de priorités qui ont des valeurs réglées à bas, moyenne, élevée ou non spécifiée.
actuellement compte à un maximum de 13 rangées, je voudrais Attendez-vous à ce qu'il y ait plusieurs colonnes avec des comptes tels que ... 2, 4, 0 p>
code: p> Il semble imprimer "non spécifié" pour les clés prioritaires quand je m'attendrais à des solutions basses ou alternatives. p> p>
4 Réponses :
Je suis sûr que vous pouvez simplement modifier votre groupe par clause en groupe par c.id code>, puis PriorityNumber code>:
Essayez ceci,
SELECT c.Name, COUNT(*) as Count_By_Priority, CASE WHEN cb.Priority = 0 THEN "Unspecified" WHEN cb.Priority = 1 THEN "Low" WHEN cb.Priority = 2 THEN "Medium" WHEN cb.Priority = 3 THEN "High" END as PriorityNumber FROM TABLE 1 cb LEFT JOIN Co c ON c.Id = cb.Id WHERE c.Name LIKE %Name%" GROUP BY c.Name,PriorityNumber ;
Vous utilisez l'agrégation, mais votre Je ne sais pas si vous voulez SELECT CODE> est incompatible avec votre groupe par code>. Je pense que vous avez l'intention de quelque chose comme: max () code> ou min () code> mais Max () code> a du sens pour moi. P> p>
Si vous voulez un nombre de priorité dans une colonne séparée, utilisez l'agrégation conditionnelle.
SELECT c.Name, sum(CASE WHEN cb.Priority = 0 THEN 1 else 0 end) as "Unspecified" sum(case WHEN cb.Priority = 1 THEN 1 else 0 end) as "Low" sum(case WHEN cb.Priority = 2 THEN 1 else 0 end) as "Medium" sum(case WHEN cb.Priority = 3 THEN 1 else 0 end) as "High" FROM TABLE 1 cb LEFT JOIN Co c ON c.Id = cb.Id WHERE c.Name LIKE %Name%" GROUP BY c.name;