-1
votes

SQL pour compter le numéro pour chaque valeur

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

code: xxx

Il semble imprimer "non spécifié" pour les clés prioritaires quand je m'attendrais à des solutions basses ou alternatives.


0 commentaires

4 Réponses :


1
votes

Je suis sûr que vous pouvez simplement modifier votre groupe par clause en groupe par c.id , puis PriorityNumber : xxx


0 commentaires

1
votes

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 ;


0 commentaires

1
votes

Vous utilisez l'agrégation, mais votre SELECT est incompatible avec votre groupe par . Je pense que vous avez l'intention de quelque chose comme: xxx

Je ne sais pas si vous voulez max () ou min () mais Max () a du sens pour moi.


0 commentaires

1
votes

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;


0 commentaires