0

WHERE句で並べ替えられた同じフィールドの結果を含む2つの列(選択ごとに1つ)を返すSQLユニオンクエリを作成しようとしています。

これが私が試していることです:

SELECT scg.grade AS course_1
FROM cp_StudentCourseGrade AS scg
JOIN cp_CourseSecSem AS css ON
css.courseSecSem_id = scg.courseSecSem_id
JOIN cp_Course AS c1 ON
c1.course_id = css.course_id
UNION
SELECT scg.grade AS course_2
FROM cp_StudentCourseGrade AS scg
JOIN cp_CourseSecSem AS css ON
css.courseSecSem_id = scg.courseSecSem_id
JOIN cp_Course AS c2 ON
c2.course_id = css.course_id**
WHERE c1.course_id = c2.course_id AND c1.course_id=1 AND c2.course_id=2;

そしてこれは私にそのようなものを返すはずです:

    course_1 | course_2
    -------------------
    4.0      | 6.0
    4.5      | 6.0
    6.0      | 5.5
    2.5      | 5.0
    1.0      | 4.0
    5.5      | 4.5

しかし、私は言うエラーがあります:

不明な列c1.course_id

誰かが私がそれをどのようにすべきか考えていますか?

4

2 に答える 2

1

これはあなたが必要とするものです:

SELECT scg1.grade AS course_1, scg2.grade AS course_2
FROM cp_StudentCourseGrade AS scg1
JOIN cp_CourseSecSem AS css1 ON
css1.courseSecSem_id = scg1.courseSecSem_id
JOIN cp_Course AS c1 ON
c1.course_id = css1.course_id AND c1.course_id=1 
JOIN cp_StudentCourseGrade AS scg2
JOIN cp_CourseSecSem AS css2 ON
css2.courseSecSem_id = scg2.courseSecSem_id
JOIN cp_Course AS c2 ON
c2.course_id = css2.course_id AND c2.course_id=2;
于 2012-12-04T00:21:30.757 に答える
1

成績が同じ生徒にリンクされていると想定される場合、次のように推測します。

Select
  scg.student_id,
  Sum(Case When css.course_id = 1 Then scg.grade Else Null End) as course_1,
  Sum(Case When css.course_id = 2 Then scg.grade Else Null End) as course_2
From
  cp_StudentCourseGrade As scg
    Inner Join 
  cp_CourseSecSem As css 
    On css.courseSecSem_id = scg.courseSecSem_id
Group By
  scg.student_id
于 2012-12-04T00:29:07.487 に答える