2010-12-13 62 views
2

在我写的一个应用程序中,我有很多疑问似乎应该是一个......但我无法弄清楚如何去做。如何使用一个查询从单个列中获取多个COUNT?

这里有一个例子:

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) 

然后我有相同四个额外的查询,仅在在最后一行包括LevelID的不同。我基本上根据他们提供的年级水平获得一定数量的入学率和学校数量。请记住,我不仅需要结果(我可以简单地联合这些查询),我需要知道哪个数字是哪个。

感谢您的任何建议。

罗素·舒特

回答

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 

或者你可以只使用GROUP BY LevelId然后添加你的结果,你得到查询回来后;它可能是更容易的工作,如果这是一个选项:

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

编辑enrollment的总和声明,以更好地反映原始查询得到回结果替换1。

+0

谢谢....我曾想过GROUP BY ...但后来我遇到了麻烦,知道我的返回值,以便我可以适当地加起来(4,5,6,7,8,14,例如,15,16,20)组。有没有办法做到这一点? – 2010-12-13 20:57:57

+0

你知道你的回报值是什么意思?使用group by,你有一个LevelID的列和一个列的每个LevelID的机构数量。您也可以在该LevelID的总入学人数中填写第三列。一旦获得了该查询,就可以将具有要合并的LevelID的行相加。 – GendoIkari 2010-12-13 21:01:56

+0

谢谢Gendolkari ...我一直盯着这么长时间,我没有想到简单地将ColumnName(LevelID)添加回查询中 - 完全如您所示!非常感谢! – 2010-12-13 21:06:09

相关问题