当前位置: 代码迷 >> Sql Server >> 按自愿求报名总人数
  详细解决方案

按自愿求报名总人数

热度:101   发布时间:2016-04-24 10:46:02.0
按志愿求报名总人数
本帖最后由 rpdg 于 2014-05-12 14:56:03 编辑
有两个表,一个保存课程列表,一个保存选课志愿,简单来说就是
T_Course:  每一门课一行记录
-----------------------
CourseId
CourseName


T_Enlist:  每个学生报名一行记录
-----------------------
EnlistId
StudentId
CourseId
ChoiceOrder
-----------------------
ChoiseOrder 意思是第几志愿,值是1、2、3中一个


现在要列出所有课程,并按照它的第一二三志愿值来统计每一门课的报名总人数,
形成结果集:
--------------------------
CourseName,
Summ1,
Summ2,
Summ3


求助各位大侠!
------解决方案--------------------
select courseid,
count(case when ChoiceOrder when 1 then 1 else null end) '第一志愿',
count(case when ChoiceOrder when 2 then 1 else null end) '第二志愿',
count(case when ChoiceOrder when 3 then 1 else null end) '第三志愿'
from T_Enlist
group by courseid

这样?
------解决方案--------------------

with cte as
(
        select CourseId, ChoiceOrder, count(0) as cnt from T_Enlist group by CourseId, ChoiceOrder
)
select a.CourseName, isnull(cte1.cnt, 0) as Summ1, isnull(cte2.cnt, 0) as Summ2,  isnull(cte3.cnt, 0) as Summ3
from T_Course a left join cte cte1 on a.CourseId = cte1.CourseId
                             left join cte cte2 on a.CourseId = cte2.CourseId
                             left join cte cte3 on a.CourseId = cte3.CourseId
where cte1.ChoiceOrder = 1
and cte2.ChoiceOrder = 2
and cte3.ChoiceOrder = 3


  相关解决方案