2016-10-28 55 views
-1

我在這裏有一個場景 - 用戶需要完成2套3套課程中的任何一套,然後才能通過。如果他只完成1或2門課程,結果將爲0.如果他完成了所有課程,則返回結果將爲1.Oracle PLSQL - 如何查詢返回結果如果找到列組合

必須完成CourseA,CourseB,CourseC以通過 或完成CourseD,CourseE,CourseF以通過

+3

用正確的樣本數據和所需的輸出發佈您的問題。它可以幫助人們快速理解問題。 – Buddi

+1

爲什麼你認爲你需要一個存儲過程? –

+0

http://stackoverflow.com/help/how-to-ask –

回答

0

如果基表有三列:student_id,course_id和grade(通過/失敗),並且還有另一個課程表,其中包含course_id和「track」(可能還有其他關於培訓班)。 「軌道」是指爲了畢業必須全部通過的一組課程;例如,一個「軌道」需要課程A,B,C(假設這些課程是課程ID),另一個需要D,E,F.

這是一個原型,並提供了一個可能的解決方案。

with 
    enrollments (student_id, course_id, grade) as (
     select 1001, 'A', 'Pass' from dual union all 
     select 1001, 'B', 'Pass' from dual union all 
     select 1001, 'D', 'Fail' from dual union all 
     select 1001, 'E', 'Pass' from dual union all 
     select 1002, 'A', 'Pass' from dual union all 
     select 1002, 'C', 'Pass' from dual union all 
     select 1002, 'D', 'Pass' from dual union all 
     select 1003, 'F', 'Fail' from dual union all 
     select 1005, 'A', 'Fail' from dual union all 
     select 1005, 'D', 'Pass' from dual union all 
     select 1005, 'E', 'Pass' from dual union all 
     select 1005, 'F', 'Pass' from dual 
    ), 
    courses (course_id, track) as (
     select 'A', 101 from dual union all 
     select 'B', 101 from dual union all 
     select 'C', 101 from dual union all 
     select 'D', 201 from dual union all 
     select 'E', 201 from dual union all 
     select 'F', 201 from dual 
    ) 
-- >> end of test data; the actual solution (SQL query) begins below this line << -- 
select distinct student_id 
from  enrollments e join courses c on e.course_id = c.course_id 
where grade = 'Pass' 
group by student_id, track 
having count(*) = 3 
; 

STUDENT_ID 
---------- 
1005 
+0

非常感謝!這正是我想要的。 Upvoted。 –