3

我有几个大型数据表,需要将列转换为数据行,列名作为字段中的数据。我可以使用合并数据透视表在 Excel 中执行此操作,但我拥有的表对于 Excel 来说太大了。有些有多达 210 列和 2300 行数据,而另一些则有 20 列和 150,000 行。

我已在电子表格中上传了一个示例,以便在 box.com 或 Google Docs 中查看。

https://docs.google.com/spreadsheet/ccc?key=0ArwEcGYwGw7kdHZya2haVDRvZ0xIM0kzRXRHZ2pQM1E

https://www.box.com/s/199ce71828c320472b57

我正在寻找一个可重复的过程,允许我对 25 个表执行此操作,并对 SQL 代码进行矿工更改,然后将它们全部合并到一个更大的表中,该表将使用 LOGRECNO 和 COLUMN ID 字段添加其他信息查询到的数据。

任何有关在 MySQL 中执行此操作的最佳方法的帮助将不胜感激。

4

2 回答 2

1

以下应该是一个可重复的过程,变化很小:

SET @sql = NULL;
SELECT  GROUP_CONCAT(DISTINCT
    CONCAT('select LOGRECNO, '
      '''',
      COLUMN_NAME,
      ''' col, ', column_name, ' as value from yourtable'
    ) separator '  union all '
  ) INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
where table_name = 'yourtable'
  and column_name <> 'LOGRECNO';

set @sql = CONCAT(@sql, ' Order by 1, 2');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

请参阅带有演示的 SQL Fiddle

于 2012-11-09T02:46:42.090 回答
0

这是数据透视表问题。

这是具有快速和动态解决方案的不错的教程:http: //datacharmer.org/downloads/pivot_tables_mysql_5.pdf

于 2012-07-10T13:29:29.793 回答