You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写SELECT查询实现行转列:查询Blue班级学生选课信息

解决方案

静态列实现(适合已知目标科目)

如果已经明确需要展示的科目(Geography、Science、English、History),可以使用条件聚合实现行转列,SQL语句如下:

SELECT
    s.`Last Name`,
    s.`First Name`,
    MAX(CASE WHEN c.Class = 'Geography' THEN 1 END) AS Geography,
    MAX(CASE WHEN c.Class = 'Science' THEN 1 END) AS Science,
    MAX(CASE WHEN c.Class = 'English' THEN 1 END) AS English,
    MAX(CASE WHEN c.Class = 'History' THEN 1 END) AS History
FROM
    `Class Groups` cg
JOIN
    Students s ON cg.ID = s.ClassID
LEFT JOIN
    Class_attendees ca ON s.ID = ca.Student_ID
LEFT JOIN
    Classes c ON ca.`Class ID` = c.ID
WHERE
    cg.`Class Name` = 'Blue'
GROUP BY
    s.ID, s.`Last Name`, s.`First Name`
ORDER BY
    s.`Last Name`;

逻辑说明:

  1. 表关联:通过Class Groups筛选Blue班级学生,再关联Students、Class_attendees、Classes获取选课信息;
  2. 条件聚合:用CASE WHEN标记学生是否选修对应科目(选中为1,未选为NULL),通过MAX聚合将同一学生的多行选课记录合并为一行;
  3. 分组排序:按学生ID、姓名分组确保每行对应一个学生,最后按姓氏排序。

动态列实现(自动适配有学生选修的科目)

如果需要自动排除无人选修的科目(比如示例中的Spanish),可以用动态SQL生成查询语句(以MySQL为例):

-- 第一步:获取Blue班级学生实际选修的科目,拼接列语句
SET @cols = NULL;
SELECT
    GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN c.Class = ''', c.Class, ''' THEN 1 END) AS `', c.Class, '`'))
INTO @cols
FROM
    `Class Groups` cg
JOIN
    Students s ON cg.ID = s.ClassID
JOIN
    Class_attendees ca ON s.ID = ca.Student_ID
JOIN
    Classes c ON ca.`Class ID` = c.ID
WHERE
    cg.`Class Name` = 'Blue';

-- 第二步:生成并执行动态查询
SET @query = CONCAT('
SELECT
    s.`Last Name`,
    s.`First Name`,
    ', @cols, '
FROM
    `Class Groups` cg
JOIN
    Students s ON cg.ID = s.ClassID
LEFT JOIN
    Class_attendees ca ON s.ID = ca.Student_ID
LEFT JOIN
    Classes c ON ca.`Class ID` = c.ID
WHERE
    cg.`Class Name` = ''Blue''
GROUP BY
    s.ID, s.`Last Name`, s.`First Name`
ORDER BY
    s.`Last Name`;
');

PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

逻辑说明:

  1. 动态生成列:先查询Blue班级学生选修的所有科目,用GROUP_CONCAT拼接每个科目的聚合判断语句;
  2. 执行动态SQL:将拼接好的列语句插入主查询,自动只显示有学生选修的科目。

最终输出结果

两种方法都会得到符合需求的结果:

Last NameFirst NameGeographyScienceEnglishHistory
BagginsFrodo111
CooperSarah111
MoodyClaire111

内容的提问来源于stack exchange,提问作者Amused

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:13:16