【问题标题】:SQL UNION Query on the same table, same fieldSQL UNION 查询同一张表,同一个字段
【发布时间】:2012-12-03 23:24:07
【问题描述】:

我正在尝试构建一个 SQL 联合查询,它将返回两列(每个选择一列),结果来自同一字段,使用 WHERE 子句排序。

这是我正在尝试的:

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

有人知道我应该怎么做吗?

【问题讨论】:

  • 如果你想要两列,你想要JOIN而不是UNION
  • 同一行的成绩是否应该以任何方式相互关联?

标签: sql union


【解决方案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;

【讨论】:

    【解决方案2】:

    如果成绩应该与同一个学生相关联,我猜是这样的:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多