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

SQL Server实现学生表与成绩表的指定格式关联输出

解决方案:按要求输出学生信息及对应成绩

要实现先显示学生信息行、再显示该学生所有成绩行的需求,关键是将学生表和成绩表的数据统一为可合并的格式,同时通过排序控制输出顺序。你之前尝试Union失败是因为未保证两个结果集的列数/格式一致,也没做排序控制。

以下是完整的SQL实现:

SELECT OutputLine
FROM (
    -- 生成学生信息行:每个有成绩的学生只输出一次
    SELECT 
        CAST(s.ID AS VARCHAR) + ', ' + s.Name + ', ' + s.Attendance + ', ' + s.Class AS OutputLine,
        s.ID,
        1 AS SortOrder,
        NULL AS LessonSort
    FROM STUDENTS s
    INNER JOIN RESULTS r ON s.ID = r.ID
    GROUP BY s.ID, s.Name, s.Attendance, s.Class

    UNION ALL

    -- 生成成绩行:关联学生表确保只保留有对应学生的成绩
    SELECT 
        CAST(r.ID AS VARCHAR) + ', ' + r.Lesson + ', ' + r.Result AS OutputLine,
        r.ID,
        2 AS SortOrder,
        r.Lesson AS LessonSort
    FROM RESULTS r
    INNER JOIN STUDENTS s ON r.ID = s.ID
) AS CombinedData
-- 排序规则:先按学生ID分组,学生行在前,成绩行在后,成绩行按课程名排序
ORDER BY ID, SortOrder, LessonSort

代码说明:

  • INNER JOIN:确保只包含有成绩记录的学生,符合你“无成绩的学生不纳入结果”的要求。
  • GROUP BY:避免同一学生因对应多条成绩而重复输出学生信息行。
  • SortOrder字段:标记学生行(1)和成绩行(2),保证学生行始终排在对应成绩行的前面。
  • LessonSort字段:对同一学生的成绩行按课程名排序,让输出更规整(和你示例中的顺序逻辑一致)。

执行这段SQL后,就能得到你期望的输出格式:

1, abc, good, 1A
1, Read, Pass-67%
1, Sing, Pass-99%
1, Write, Pass-89%
2, xyz, bad, 1B
2, Read, Pass-75%
3, dsk, good, 1A
3, Read, Pass-55%
3, Sing, Fail-47%
4, uij, bad, 1B
4, Sing, Fail-10%
4, Write, Pass-90%

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:31:55