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

如何按指定列分组并实现行转列的表格结构转换?

按Year分组实现行转列的表格转换方案

SQL实现(以MySQL为例)

思路

先为每个年份的记录生成行号,再通过行号关联不同年份的数据,将年份转为列,对应月份缩写作为行内容。

代码示例

-- 处理原始数据,提取月份缩写并生成年份内的行序号
WITH year_month_data AS (
    SELECT 
        Year,
        LEFT(Month, 3) AS Month_Abbr, -- 提取月份前3位作为缩写
        ROW_NUMBER() OVER (PARTITION BY Year ORDER BY Month) AS row_id
    FROM your_table -- 替换为你的实际表名
)
-- 按行号关联不同年份的数据,生成目标表格
SELECT 
    y20.Month_Abbr AS `2020`,
    y21.Month_Abbr AS `2021`
FROM (SELECT Month_Abbr, row_id FROM year_month_data WHERE Year = 2020) y20
FULL JOIN (SELECT Month_Abbr, row_id FROM year_month_data WHERE Year = 2021) y21
ON y20.row_id = y21.row_id;

说明

  • ROW_NUMBER() 用于给每个年份内的记录按月份顺序编行号,确保同序号的记录能对齐到同一行。
  • FULL JOIN 会保留两个年份的所有行,若某一年份的行号对应另一年份无数据,对应位置会显示NULL,可根据需求用COALESCE替换为空字符串。
  • 其他数据库(如SQL Server、Oracle)语法类似,仅部分关键字可能有差异(如Oracle用FULL OUTER JOIN)。

Excel实现

步骤

  1. 提取月份缩写:在空白列(如E列)输入公式 =LEFT(B2,3),下拉填充所有行,得到所有月份的前3位缩写。
  2. 设置目标表头:在G1单元格输入2020,H1单元格输入2021。
  3. 生成各年份的月份列表:
    • 选中G2单元格,输入数组公式:=INDEX($E$2:$E$5, SMALL(IF($A$2:$A$5=G$1, ROW($A$2:$A$5)-ROW($A$2)+1), ROWS(G$2:G2))),按Ctrl+Shift+Enter确认输入,下拉填充直到出现#NUM!(表示该年份无更多数据)。
    • 选中H2单元格,输入数组公式:=INDEX($E$2:$E$5, SMALL(IF($A$2:$A$5=H$1, ROW($A$2:$A$5)-ROW($A$2)+1), ROWS(H$2:H2))),同样按Ctrl+Shift+Enter确认,下拉填充。
  4. 清理无效数据:将出现#NUM!的单元格替换为空,即可得到目标表格结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:48:18