2016-02-05 45 views
-1

我对我正在尝试运行的sql代码有些疑惑。首先我有2个表是免谈:SQL执行选择作为列

当然

  • id_course
  • name_course
  • date_begin
  • date_finish
  • number_students_enrolled

students_course

  • id_student
  • id_course
  • 状态

我需要进行选择 “课程” 表的,而且我在 “students_course” 数行,并添加如果它对应于相同的课程并且状态等于3,则返回“number_students_enrolled”列的结果。我不知道如何组合select语句并将结果添加到第一个表中。

例如,我有一个课程,注册了9名学生,但在“students_course”表中存在另外3行属于相同课程ID并且它的状态等于3,所以我必须对它进行计数,然后将它添加到number_students_enrolled列并显示最终结果,在这种情况下它将是12.你能帮我解决这个问题吗?谢谢!

某些样本数据:

当然

id_course - name_course - date_begin - date_finish - number_students_enrolled 
    150  - maths - 02/10/16 - 04/10/16 -   9 
    172  - economy - 02/14/16 - 05/08/16 -   21 

students_course

id_student - id_course - state 
    10  - 150 - 3 
    12  - 150 - 3 
    13  - 150 - 3 
    14  - 150 - 1 
    15  - 194 - 2 
    16  - 194 - 3 

选择后,我必须得到以下结果

id_course - name_course - date_begin - date_finish - number_students_enrolled 
    150  - maths - 02/10/16 - 04/10/16 -   12 
    172  - economy - 02/14/16 - 05/08/16 -   21 
+0

我觉得你应该向我们展示了一些样本数据,所以我们不会花时间在错误的假设。 –

+0

这看起来像一个非常基本的聚合加入。你有什么尝试? – sgeddes

+0

谢谢,我添加了一些示例数据以帮助您理解我的问题。对不起,文本格式,这是我第一次在这里,我正在学习如何使用它。 –

回答

0

不共考虑你已经number_students_enrollled列,我给你一个查询。希望能帮助到你。

select C.id_course, C.name_course, 
     (select count(1) 
      from students_course 
      where id_course = C.ID 
      and state = 3) as call_as_you_need_this_column 
    from course C 
order by C.id_course 

这只是一种方法来达到你所需要的。

1

这应该为你工作:

SELECT c.name_course,c.number_students_enrolled+(SELECT count(sc2.id_student) 
FROM dbo.students_course sc2 WHERE sc2.id_course=c.id_course 
AND sc2.state =3) FROM dbo.course c 
0

这个查询将会给你的学生的入学人数:

select c.id_course, count(*) as students_enrolled 
from course c join student_course sc on c.id_course = sc.id_course 
group by id_course; 

example

,如果你希望它是“预先计算,我会建议一个看法。

0

尝试此查询来获取引起

SELECT c.id_course,c.name_course,c.date_begin,c.date_finish, 
    (NVL(temp.cnt, 0)+c.number_students_enrolled) 
    FROM course c 
    left join (SELECT count(sc.id_student) as cnt,sc.id_course as course_id 
    FROM students_course sc WHERE sc.state =3 group by sc.id_course) as temp 
    on temp.course_id =c.id_course