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

SQL多列转行问题:如何将多组编码列拆分为带标识字段的独立行?

可行实现方案

1. SQL实现(适用于数据库存储的表数据)

核心用UNION ALL拼接26组编码列,写法简单直接,适配26组固定分组的场景:

SELECT ID1, COL1, COL2, `CODE A1` AS CODE1, `CODE A2` AS CODE2, `CODE A3` AS CODE3 FROM 表A
UNION ALL
SELECT ID1, COL1, COL2, `CODE B1` AS CODE1, `CODE B2` AS CODE2, `CODE B3` AS CODE3 FROM 表A
UNION ALL
-- 中间依次补全C到Y的分组,结构和上面一致
UNION ALL
SELECT ID1, COL1, COL2, `CODE Z1` AS CODE1, `CODE Z2` AS CODE2, `CODE Z3` AS CODE3 FROM 表A

如果是支持UNPIVOT语法的数据库(比如Oracle、SQL Server、Spark SQL等),可以写得更简洁:

-- 以Spark SQL为例
SELECT ID1, COL1, COL2, CODE1, CODE2, CODE3
FROM 表A
UNPIVOT (
  (CODE1, CODE2, CODE3) 
  FOR group_code IN (
    (`CODE A1`, `CODE A2`, `CODE A3`),
    (`CODE B1`, `CODE B2`, `CODE B3`),
    -- 依次补全剩余分组
    (`CODE Z1`, `CODE Z2`, `CODE Z3`)
  )
)

2. Python Pandas实现(适用于本地文件存储的表数据)

用循环拼接即可实现,示例代码:

import pandas as pd

# 读取原始表数据,假设是csv文件
df = pd.read_csv('表A.csv')
# 固定标识列
id_cols = ['ID1', 'COL1', 'COL2']
# 生成所有编码列分组
groups = []
for c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
    groups.append([f'CODE {c}1', f'CODE {c}2', f'CODE {c}3'])

# 遍历分组拼接结果
result = pd.DataFrame()
for g in groups:
    tmp = df[id_cols + g].copy()
    tmp.columns = id_cols + ['CODE1', 'CODE2', 'CODE3']
    result = pd.concat([result, tmp], ignore_index=True)

# 导出结果
result.to_csv('拆分后结果.csv', index=False)

3. Excel实现(适用于小数据量的Excel表格)

通过Power Query实现操作步骤:

  • 选中原始表数据,点击「数据」选项卡→「从表格/区域」导入Power Query编辑器
  • 选中ID1、COL1、COL2三列,右键→「逆透视其他列」
  • 新增自定义列,提取编码的分组标识(比如CODE A1的分组标识为A)
  • 按分组标识、ID1、COL1、COL2分组,把值转成列,得到每行三个编码的结构
  • 导出数据到Excel即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:39:00