2016-02-05 58 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