1

我有 3 张桌子studentsenrolmentscourses。任何学生都可以报读任何课程,每门课程都有一个“级别”,从 1(初级)到 4(高级)。我正在尝试查找学生信息以检查学生是否注册了 1/2/3/4 级课程。我正在尝试通过以下方式获取学生注册信息结果:

结果:

==================================================================
student_id | student_name | level_1 | level_2 | level_3 | level_4
==================================================================
324245       Rick Grimes     Yes        Yes        No       No
324912       Maggie Greene   Yes        Yes       Yes       No

表结构如下:

结构:

学生桌

=============================================
student_id | name | email | school_id | grade
=============================================

课程表

==============================================================================
course_id | name | description | level | credits | course_starts | course_ends
==============================================================================

招生表

============================================
id | student_id | course_id | enrolment_date
============================================
4

1 回答 1

1
SELECT  a.student_id,
        a.student_name,
        CASE WHEN SUM(c.level = 1) > 0 THEN 'Yes' ELSE 'No' END level_1,
        CASE WHEN SUM(c.level = 2) > 0 THEN 'Yes' ELSE 'No' END level_2,
        CASE WHEN SUM(c.level = 3) > 0 THEN 'Yes' ELSE 'No' END level_3,
        CASE WHEN SUM(c.level = 4) > 0 THEN 'Yes' ELSE 'No' END level_4
FROM    students a
        LEFT JOIN enrollments b
            ON a.student_id = b.student_id
        LEFT JOIN curses c
            ON b.course_id = c.course_ID
GROUP   BY a.student_id, a.student_name

您需要首先加入所有使用的表格,LEFT JOIN因为您要显示所有学生。该语句SUM(c.level = 1)统计所有level等于1的记录,如果结果大于0,则表示该学生已经参加了该level内的课程。

于 2013-09-20T19:34:10.683 回答