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

SQL技术问询:如何将12张月度表合并为一张年度报表?

问题分析与解决方法

你用INNER JOIN合并月度表的思路完全错了——INNER JOIN是用来关联不同表中具有相同关联键的记录,它要求所有关联的表中都存在同一个ride_id才会返回结果。但骑行数据里,一个ride_id只会对应某一个月的单次骑行,不可能在所有12个月里都出现,所以你的查询自然返回空结果。

要把12张结构相同的月度表合并成一张年度报表,你需要用行堆叠的方式,也就是SQL里的UNION ALL。

正确的SQL写法

假设所有月度表的列结构完全一致(列名、顺序、数据类型都相同),可以直接用UNION ALL把所有表的记录合并:

SELECT * FROM april20
UNION ALL
SELECT * FROM may20
UNION ALL
SELECT * FROM june20
UNION ALL
SELECT * FROM july20
UNION ALL
SELECT * FROM aug20 -- 注意你原查询里漏了8月的表,记得补全12个月的所有表
UNION ALL
SELECT * FROM sept20
UNION ALL
SELECT * FROM oct20
UNION ALL
SELECT * FROM nov20
UNION ALL
SELECT * FROM dec20
UNION ALL
SELECT * FROM jan21
UNION ALL
SELECT * FROM feb21
UNION ALL
SELECT * FROM mar21
UNION ALL
SELECT * FROM april21

关键注意事项

  • 如果各月度表的列结构有差异(比如列顺序不同、部分表少列/多列),不要用SELECT *,要手动指定所有需要的列,确保每个SELECT语句的列数、数据类型、顺序完全一致,示例如下:
    SELECT ride_id, ride_start_time, ride_end_time, start_station_id, end_station_id FROM april20
    UNION ALL
    SELECT ride_id, ride_start_time, ride_end_time, start_station_id, end_station_id FROM may20
    -- 依次补全剩余10张表的SELECT语句
    
  • 优先用UNION ALL而不是UNION:UNION会自动去重,但会额外消耗性能;如果你的骑行数据里ride_id是全局唯一的(不会跨月重复),UNION ALL足够用,效率更高。
  • 合并后可以添加一个额外的列标记每条记录所属的月份,方便后续分析,示例:
    SELECT '2020-04' AS month, * FROM april20
    UNION ALL
    SELECT '2020-05' AS month, * FROM may20
    -- 其他表依次添加对应月份标记
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:05:18