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

SQL按id分组行转列:将月份与订单指标拼接为列的实现问题

问题解决方法

问题根源

你添加GROUP BY后仅返回单条记录数据的核心原因是:CASE 语句未搭配聚合函数使用。
分组操作执行时,数据库默认只会取每个分组内的第一行数据返回,非聚合类的字段不会自动合并多行的结果,你写的CASE逻辑在第一行不匹配月份时就直接返回0,后续行的有效数值不会被捕获。

修正后的SQL语句

SELECT 
    id,
    MAX(CASE WHEN order_month = '2021-07' THEN order_count ELSE 0 END) as `2021-07_order_count`,
    MAX(CASE WHEN order_month = '2021-07' THEN order_sum ELSE 0 END) as `2021-07_order_sum`,
    MAX(CASE WHEN order_month = '2021-08' THEN order_count ELSE 0 END) as `2021-08_order_count`,
    MAX(CASE WHEN order_month = '2021-08' THEN order_sum ELSE 0 END) as `2021-08_order_sum`,
    MAX(CASE WHEN order_month = '2021-09' THEN order_count ELSE 0 END) as `2021-09_order_count`,
    MAX(CASE WHEN order_month = '2021-09' THEN order_sum ELSE 0 END) as `2021-09_order_sum`
FROM orders
GROUP BY id
ORDER BY id

说明

  • 这里使用MAX()聚合函数,会提取同个id下所有行对应月份的最大有效值,规避了首行非匹配月份返回0的问题。如果你的业务中存在同一个id同一个月有多条订单记录的场景,把MAX()替换为SUM()即可自动累加当月的订单总量和总金额。
  • 已修正原SQL中的两处细节问题:原表主键为id而非merchant_id,列别名也调整为你预期输出的下划线命名格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:07