PAYATHON 2026

Excel 如何将同一 Case Number 的多个 Record Number 展开为列?

数据阿明

可以实现这种布局,通常使用 Power Query 比较合适。先为每个 Case Number 下的记录添加组内序号,再将序号转换为 Record1、Record2 等列。

普通数据透视表的“值”区域主要用于汇总。只有 Case Number 和 Record Number 两个字段时,无法直接按第一条、第二条的顺序横向排列每个案件的记录编号;将文本编号放入“值”区域,通常显示的是计数。

目标布局

以下数据用于说明转换方式:

Case NumberRecord Number
C001R101
C001R102
C002R201

转换后:

Case NumberRecord1Record2
C001R101R102
C002R201

使用 Power Query 转换

建议从原始明细表开始,不必从已经汇总的数据透视表中提取数据。假设原始字段名为 Case Number 和 Record Number,操作如下:

  1. 选中明细数据,通过“数据 → 从表格/区域”进入 Power Query。
  2. 按 Case Number 分组,操作选择“所有行”,将生成的嵌套表列命名为 Rows。
  3. 添加自定义列 IndexedRecords,使用下面的表达式,为每个案件的记录从 1 开始编号:
Table.AddIndexColumn([Rows], "RecordIndex", 1, 1, Int64.Type)
  1. 删除原来的 Rows 列,展开 IndexedRecords,只保留其中的 Record Number 和 RecordIndex。展开时取消使用原始列名作为前缀,便于后续引用。
  2. 添加自定义列 RecordHeader:
"Record" & Text.From([RecordIndex])
  1. 删除 RecordIndex,此时只保留 Case Number、RecordHeader 和 Record Number 三列。
  2. 选中 RecordHeader,执行“透视列”,值列选择 Record Number,在高级选项中选择“不聚合”。
  3. 将结果加载回工作表。

每个案件内的索引都是唯一的,因此每个 Case Number 和 RecordHeader 的组合只对应一条记录,可以直接透视。记录数量较少的案件,其余列会留空。

如果 Record1、Record2 的顺序有业务含义,应先在每个分组内按所需字段排序,再添加索引。编号大小、时间先后和原始行顺序并不是同一种排序规则。

支持动态数组时,也可以使用公式

如果所用 Excel 支持 FILTER 和动态数组,可以筛选某个案件的记录,再用 TRANSPOSE 横向输出。

假设:

  • A 列是 Case Number。
  • B 列是 Record Number。
  • D2 是需要查询的案件编号。
  • E1、F1 等单元格已填写 Record1、Record2 等列标题。

在 E2 输入:

=TRANSPOSE(FILTER($B$2:$B$1000,($A$2:$A$1000=$D2)*($B$2:$B$1000<>""),""))

结果从 E2 开始向右溢出,顺序与源数据一致。输出区域需要保持空白,否则可能出现 #SPILL!。公式中的行号范围只是示例,需要按实际数据调整。

继续使用数据透视表的条件

如果 Record Number 是数值,可以先在源数据中添加“案件内序号”辅助列,再把 Case Number 放入行区域、序号放入列区域、Record Number 放入值区域,并使用“最大值”或“最小值”汇总。前提是每个案件与序号的组合只有一条记录。

如果编号包含字母,或需要保留前导零,使用 Power Query 或上述公式更直接。编号应按文本保存;已经丢失的前导零无法仅靠转换类型恢复。

备注:内容仅供参考。