2010-12-13 2 views
2

Dans une application que j'ai écrite, j'ai beaucoup de questions qui semblent devoir être une ... mais je ne peux pas comprendre comment le faire.Comment puis-je obtenir plusieurs COUNT à partir d'une seule colonne avec une requête?

Voici un exemple:

SELECT SUM(enrollment) AS SchoolEnrollment, COUNT(institutionID) AS NumberOfSchools 
FROM Schools 
WHERE LevelID IN (4,5,6,7,8,14,15,16,20) 

SELECT SUM(enrollment) AS SchoolEnrollment, COUNT(institutionID) AS NumberOfSchools 
FROM Schools 
WHERE LevelID IN (10,11) 

Alors j'ai quatre requêtes supplémentaires qui sont identiques, qui ne diffèrent que dans les années LevelID qui figurent dans la dernière ligne. Je reçois essentiellement une somme d'inscriptions et le nombre d'écoles, en fonction des niveaux qu'ils offrent. Gardez à l'esprit que je n'ai pas seulement besoin des résultats (je pourrais simplement UNION ces requêtes), j'ai besoin de savoir quel numéro est lequel.

Merci pour tout conseil.

Russell Schutte

Répondre

7
SELECT SUM (case 
       when LevelID IN (4,5,6,7,8,14,15,16,20) then enrollment 
       else 0 
      end) as firstEnrollmentCount, 
     COUNT (case 
       when LevelID IN (4,5,6,7,8,14,15,16,20) then 1 
       else 0 
      end) as firstNumberOfInstitutions, 
     SUM (case 
       when LevelID IN (10, 11) then enrollment 
       else 0 
      end) as secondEnrollmentCount, 

     COUNT (case 
       when LevelID IN (10, 11) then 1 
       else 0 
      end) as secondNumberOfInstitutions, 
FROM Schools 

Ou vous pouvez simplement utiliser GROUP BY LevelId puis ajouter vos résultats une fois que vous revenez à la requête; il pourrait être plus facile de travailler avec, si c'est une option:

SELECT LevelID, Count(*) FROM Schools GROUP BY LevelID 

EDIT Remplacée 1 avec enrollment dans la déclaration de somme afin de mieux refléter les résultats retour par les acquis des requêtes originales.

+0

Merci ... J'avais pensé au GROUP BY ... mais ensuite j'ai eu des problèmes en connaissant mes valeurs de retour afin que je puisse correctement additionner le (4,5,6,7,8,14, 15,16,20), par exemple. Y-a-t-il un moyen de faire ça? –

+0

Que voulez-vous dire connaître vos valeurs de retour? En utilisant le groupe par, vous avez une colonne pour LevelID et une colonne pour le nombre d'institutions pour chaque LevelID. Vous pouvez également avoir une troisième colonne pour l'inscription totale pour ce LevelID. Une fois cette requête récupérée, vous pouvez simplement ajouter les lignes ayant les LevelID que vous souhaitez combiner. – GendoIkari

+0

Merci Gendolkari ... J'ai regardé cela si longtemps, je n'ai pas pensé à simplement ajouter le ColumnName (LevelID) dans la requête - exactement comme vous l'avez montré! Merci beaucoup! –

Questions connexes