###前提・実現したいこと
以下の4つのテーブルがあります。
1
DEPARTMENT_TO_MAJOR: 大学の学部(または専攻)のコード(DCODE)と名前(DNAME)
2
Course:大学の講義のコードと講義名を持つ
科目コード、コース名
3
Section: 大学のセクション(section_id)のコードと所属している科目のコード(course_num)+その他
***ここではセクション=各学期に開かれる講義と定義します。例えば、「数学1」という科目(Course)が2017年春と2017年秋に開かれたとき、それぞれの学期の講義を別々のセクションとして認識します。セクションが多、科目が一の関係です)。
4
GRADE_REPORT: 学生番号(student_number)とその学生が履修したOR履修しているセクションのコード(section_id)とその成績(grade:履修中は空欄)を持つ。
以下のようなテーブルを作成したいです。
|学部名|科目コード|科目名|A|B|C|履修生徒数
|:--|:--:|--:|
|chemistry|001|organic chemistry|3|5|5|16|
|biology|002|genetics|2|1|0|10|
|physics|003|quantum physics|0|3|3|6|
科目をすべて列挙して、その科目を取った学生のGradeをGrade別にカウントして、さらにその合計を一番右に表示したいです。ただし、以下のような条件があります。
0. まだどの学生も、その科目のGradeを持ってない場合は、その科目は表示しません。
0. 一人の生徒は同じ科目を何度も受けられるとします(別セクションで)。その際、Gradeはそれぞれカウントします(e.g. CとBをとったらそれぞれ数えます)。
0. もし、Grade Dをとった生徒の数またはGrade Fをとった生徒の数がGrade Cをとった生徒の数より多かった場合は、その科目を表示しません。
0. Dept Name, A, B, C, D, F, Course Numberの順でソートします(A, B, C はDesc、それ以外はAcsです)。
###発生している問題・エラーメッセージ
自分でいろいろ試してみて、とりあえず、カラムだけは目的のテーブルと同じものができました。ただ、PIVOTがうまくいかず、Gradeの値とその合計がとれずすべて0になってしまいます。
今の私のコードの問題として以下があると思っているのですが、それをどうやって解決すればよいのかわかりません。。。
0. Inline selectの中のSQLではGradeのデータが取れているのに、Pivotではなぜかカウントされない。
0. 一番右のカラム"TotalEnroll"がPivotが分類する要素の一つになっていて合計をとるようになってない。
###試したこと
0. Pivot関数の中やその前のSelect句やInlineの別名をいろいろ変えてみる。
0. 下記のページを参考にいろいろ試してみる。でもうまくいきませんでした。
https://community.oracle.com/thread/1094307
https://www.insight-tec.com/mailmagazine/ora3/vol422.html
- 一番そとのSelect句で、具体的な列名を指定すると以下のエラーが出る(アスタリスクなら出ません)。
ORA-00904: "NumOfEnrollEachCo"."TotalEnrollEachCourse": invalid identifier
00904 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 11 Column: 7
- Inline selectですでに取得したGradeの合計値を
,"NumOfStEachCo"."numOfStEachCo" as "TotalEnrollEachCourse"
と書いて外のSQLでも使えるようにすると、そのカラムが”A”カラムの左に来てしまう。 - Inline selectですでに取得したGradeの合計値を
,"NumOfStEachCo"."numOfStEachCo" as "TotalEnroll"
と書いて外のSQLでも使えるようにすると、以下のエラーが発生する。
ORA-00918: column ambiguously defined
00918 00000 - "column ambiguously defined"
*Cause:
*Action:
Error at Line: 4 Column: 5
###補足情報(言語/FW/ツール等のバージョンなど)
Oracle 12c を使ってOracle Developer上で動かしています。
ほかに何か必要な情報があれば、すぐに用意します。
どうか、よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。