2015-09-19 52 views
-1

我有一個名爲COURSE的表另一個表STUDENT。oracle itertaion

COURSE_ID COURSE_NAME STUDENT_ID 
    1   HISTORY 11 
    2   BIOLOGY 11 
    3   BOTNY  11 

STUDENT_ID STUDENT_NAME 
    11  AAA 
    22  BBB 
    33  CCC 

現在我必須寫一個SQL查詢其如下返回結果,

STUDENT_ID COURSE_NAME_1 COURSE_NAME_2 COURSE_NAME_3 
    11  HISTORY   BIOLOGY  BOTNY 

幫助我如何寫的Oracle SQL查詢this.how我做了相應的迭代課程名稱學生們。

+0

你在甲骨文或MySQL寫這個?這是兩個不同的數據庫(儘管由同一家公司提供)。 –

+0

Oracle數據庫 – jack

+0

我修復了標籤。你應該修改標題。 –

回答

1

這是一個數據透視查詢,但您希望列舉的課程。您可以使用row_number()枚舉值,然後有條件的聚集,使這些值在單獨的列:

select student_id, 
     max(case when seqnum = 1 then course_name end) as course_1, 
     max(case when seqnum = 2 then course_name end) as course_2, 
     max(case when seqnum = 3 then course_name end) as course_3 
from (select c.*, row_number() over (partition by student_id order by course_id) as seqnum 
     from course c 
    ) c 
group by student_id; 
+0

你能解釋這個查詢的工作嗎? – jack

+0

你提到它是一個數據透視查詢,使用PIVOT的例子也可能有好處,我將其中一個複製到上面的註釋中。 –