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

SQL时间线重叠查询求助:基于两张表生成预期结果

解决两表合并生成行转列结果表的需求

需求概述

基于Table 1和Table 2的成绩数据,生成按学生ID、姓名聚合,各科成绩作为列的结果表。

数据表结构与数据

Table 1

ID姓名科目分数
1张三语文85
1张三数学90
2李四语文78
2李四数学88

Table 2

ID姓名科目分数
1张三英语92
2李四英语85
3王五语文95

预期结果

ID姓名语文数学英语
1张三859092
2李四788885
3王五95NULLNULL

SQL实现方案

以MySQL为例,通过UNION ALL合并两表数据,再利用条件聚合完成行转列:

SELECT
    ID,
    姓名,
    MAX(CASE WHEN 科目 = '语文' THEN 分数 END) AS '语文',
    MAX(CASE WHEN 科目 = '数学' THEN 分数 END) AS '数学',
    MAX(CASE WHEN 科目 = '英语' THEN 分数 END) AS '英语'
FROM (
    -- 合并两张表的所有成绩数据
    SELECT ID, 姓名, 科目, 分数 FROM Table1
    UNION ALL
    SELECT ID, 姓名, 科目, 分数 FROM Table2
) AS 合并表
GROUP BY ID, 姓名
ORDER BY ID;

方案说明

  1. 合并数据:UNION ALL将两张表的成绩记录合并,若需去重(比如同一学生同一科目存在重复记录)可替换为UNION
  2. 行转列:CASE语句匹配对应科目,MAX聚合函数提取该学生对应科目的分数(因分组后每个学生每个科目仅一条有效数据,MAX/AVG/MIN均可)
  3. 动态适配:若科目不固定,可使用动态SQL自动生成列名,适配更多科目场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:03:15