2013-04-09 31 views
0

我有點難倒如何構建此查詢。我有兩張桌子,一張是畢業要求(GradReq),另一張是獲得學生學分(StoredGrades)。 GradReq列出每個「信用卡」以及可以填寫的相關課程編號。 StoredGrades列出課程編號以及學生是否通過課程。理論實例如下。Oracle SQL - 用學分填補學生畢業要求。 (循環或創意加入?)

GradReq: 
CreditBucket CourseNumber 
Algebra I  100000 
Algebra I  100001 
Algebra II  100001 
Algebra II  100002 

StoredGrades: 
CourseNumber Passed StudentID 
100001   1  30003 

我遇到的問題是,與標準(左)參加兩個代數I和代數II信貸桶將充滿學生30003時真的點數只可以使用一次。有任何想法嗎?

我想這可能是最好的循環通過每個信用桶和評估他們一次,但我不知道如何看起來。謝謝你的幫助!

+0

期望的結果集是什麼? – 2013-04-09 17:08:50

+1

我讀取這些數據的方式,學生通過課程'100001'滿足了「代數I」和「代數II」的學分要求。如果您只想爲「100001」課程授予一個「學分」,您將需要一種方法來區分他們獲得的學分 - 例如,如果我是學生'30003',我希望它顯示爲「代數II」而不是我的成績單上的「代數I」。 – 2013-04-09 17:22:49

+0

首先匹配單身人士的兩步過程可能是最好的。循環或不循環,您還需要一些方法來確定課程分配到學分的優先級,反之亦然,其中多個課程可滿足要求或課程可滿足多個要求。 – JAQFrost 2013-04-09 18:12:56

回答

0

您目前擁有的數據模型只能回答資格問題,例如「student1滿足哪些要求」。當您進行外部連接時,您會得到2個結果,這是正確的。滿足他的Algebra1或Algebra2畢業要求。

你試圖實現通常在不同的實體/表所做的實際信用協會。喜歡的東西...

GradReqUsed (or GradReqConsumtion, perhaps?) 

CreditBucket CourseNumber StudentID 

Algebra I  100001  30003 

這基本上意味着學生將有100001計入代數1桶。