将MySQL表从列转换为行

3
我有几张大型数据表格,需要将列转换为数据行,并在字段中使用列名作为日期。 我可以在 Excel 中使用汇总数据透视表来完成此操作,但是我拥有的表格对于 Excel 太大了。 其中一些表格具有 210 列和 2300 行的数据,而另一些表格则具有 20 个列和 150,000 行。 我已经在 Box.com 或 Google 文档中上传了样例表格以供查看。

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

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

我正在寻找一种可重复的过程,允许我对25个表执行此操作,只需对SQL代码进行轻微更改,然后将它们合并成一个较大的表,在查询数据时使用LOGRECNO和COLUMN ID字段添加额外信息。

如果能提供在MySQL中完成此操作的最佳方法,将不胜感激。


可能是MySQL数据透视表的重复问题。 - RichardTheKiwi
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 with Demo


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接