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

如何将MySQL表从行式结构转列式并导出为CSV?

解决方案:长表转宽表并导出CSV

你的需求本质是行转列(长表转宽表),无论是通过SQL还是脚本都可以实现,以下是具体方案:

一、SQL实现方案

不同数据库的行转列语法略有差异,核心思路是按Item分组,将不同Attribute对应的Value映射为单独列:

1. 通用SQL(适用于多数数据库)

用CASE表达式配合分组聚合实现:

SELECT
  Item,
  MAX(CASE WHEN Attribute = 'AttrName1' THEN Value END) AS AttrName1,
  MAX(CASE WHEN Attribute = 'AttrName2' THEN Value END) AS AttrName2,
  MAX(CASE WHEN Attribute = 'AttrName3' THEN Value END) AS AttrName3
FROM your_table_name
GROUP BY Item;

执行完该查询后,直接通过数据库客户端导出结果为CSV即可(主流数据库客户端均支持此功能)。

2. 特定数据库简化语法

  • SQL Server:使用PIVOT函数
SELECT *
FROM your_table_name
PIVOT (
  MAX(Value)
  FOR Attribute IN ([AttrName1], [AttrName2], [AttrName3])
) AS PivotTable;
  • PostgreSQL:需先启用tablefunc扩展,再用crosstab函数
-- 启用扩展
CREATE EXTENSION IF NOT EXISTS tablefunc;

SELECT *
FROM crosstab(
  'SELECT Item, Attribute, Value FROM your_table_name ORDER BY 1,2',
  'SELECT DISTINCT Attribute FROM your_table_name ORDER BY 1'
) AS ct(Item TEXT, AttrName1 TEXT, AttrName2 TEXT, AttrName3 TEXT);

二、脚本实现方案(以Python为例)

如果SQL实现受限,用Python的pandas库可快速完成处理,代码简洁易维护:

import pandas as pd

# 读取原始数据(支持从数据库/本地CSV/Excel读取)
# 从数据库读取示例:df = pd.read_sql('SELECT * FROM your_table_name', db_connection)
df = pd.read_csv('original_data.csv')

# 执行行转列操作
pivoted_df = df.pivot(index='Item', columns='Attribute', values='Value').reset_index()

# 导出为目标CSV
pivoted_df.to_csv('output_data.csv', index=False)

该脚本会自动完成列名映射,直接生成符合要求的CSV文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:45:22